呵呵,今天写php的时候不停的500错误,但是没有报错。
找了一下发现,是别人把开发环境上的php.ini的配置给修改了:
display_errors = Off
修改为On后就好了,就可以看到详细的php的出错信息了
最近需要通过php调用一个脚本时直接将脚本中的输出的及时的输出出来。找了一下,基本解决了这个问题。
查看了一下php.ini的配置,发现output_buffering = On,输出缓冲区是打开的,在程序里怎么flush都不行,
但是修改一下web服务器的配置文件对其它用户会有影响,只好利用web服务器提供的设置接口了。
<FilesMatch "buftest.php$">
php_flag output_buffering off
</FilesMatch>
有的同学会问,为什么不在程序里通过ini_set来设置呢?
观察一下php的各个设置项说明:
oracle.max_links
"-1"
PHP_INI_ALL
oracle.max_persistent
"-1"
PHP_INI_ALL
output_buffering
"0"
PHP_INI_PERDIR
output_handler
NULL
PHP_INI_PERDIR
从 PHP 4.0.4 起可用。
pdo_odbc.connection_pooling
"strict"
PHP_INI_ALL
从 PHP 5.1.0 起可用。
pfpro.defaulthost
"test-payflow.verisign.com"
PHP_INI_ALL
从 PHP 4.0.2 起可用。
这里的PHP_INI_PERDIR说明了这个配置只能在php.ini或者httpd.conf或者.htaccess文件来设置。
PHP_INI_* 常量的定义
PHP_INI_USER
1
配置选项可在用户的 PHP 脚本或 Windows 注册表中设置
PHP_INI_PERDIR
2
配置选项可在 php.ini, .htaccess 或 httpd.conf 中设置
PHP_INI_SYSTEM
4
配置选项可在 php.ini or httpd.conf 中设置
PHP_INI_ALL
7
配置选项可在各处设置
通过ini_set能够设置也只有PHP_INI_ALL的变量了。
下面是程序的是一个示例:
buftest .php
<?php
echo "test ......................................................<br/>";
@flush();
echo "sleep(10)<br/>";
sleep(10);
echo "after sleep...................................................<br/>";
@flush();
echo "sleep(10)<br/>";
sleep(10);
echo "after sleep2...................................................<br/>";
@flush();
echo "sleep(10)<br/>";
sleep(10);
echo "after sleep3...................................................<br/>";
?>
修改了配置后,执行这个程序就看到效果了。
如果你的程序中使用到ob_start,那么需要flush需要配合ob_flush()的调用才行。
参考:
http://php.net/manual/en/configuration.changes.php