PHP错误处理error


原文链接: PHP错误处理error

How to fix "Headers already sent" error in PHP - Stack Overflow

报警级别

设置php 不显示warning警告
1、每个文件头部加上error_reporting(0);

2、修改php配置文件 php.ini ,找到下面这一行:

error_reporting = E_ALL | E_STRICT;
修改参数如下:

E_ALL - 所有的错误和警告(不包括 E_STRICT)
E_ERROR - 致命性的运行时错误
E_WARNING - 运行时警告(非致命性错误)
E_PARSE - 编译时解析错误
E_NOTICE - 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)
E_STRICT - 编码标准化警告,允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。
E_CORE_ERROR - PHP启动时初始化过程中的致命错误
E_CORE_WARNING - PHP启动时初始化过程中的警告(非致命性错)
E_COMPILE_ERROR - 编译时致命性错
E_COMPILE_WARNING - 编译时警告(非致命性错)
E_USER_ERROR - 用户自定义的错误消息
E_USER_WARNING - 用户自定义的警告消息
E_USER_NOTICE - 用户自定义的提醒消息
例子:
error_reporting = E_ALL & ~E_NOTICE ; 显示所有的错误,除了提醒
error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR ; 仅显示错
error_reporting=E_ERROR :只会报告致命性错误
问题:
PHP 设置文件php .ini中明明已经设置display_errors = Off,但是在运行过程中,网页上还是会出现错误信息。
解决:
经查log_errors= On,据官方的说法,当这个log_errors设置为On,那么必须指定error_log文件,如果没指定或者指定的文件没有权限写入,那么照样会输 出到正常的输出渠道,那么也就使得display_errors 这个指定的Off失效,错误信息还是打印了出来。于是将log_errors = Off,问题就解决了
<?php
//禁用错误报告
error_reporting(0);
//报告运行时错误
error_reporting(E_ERROR | E_WARNING | E_PARSE);
//报告所有错误
error_reporting(E_ALL);
?>

另附:

问:
可否关闭PHP的错误提示?我不希望让别人看到我程序的报错。

答:
由于PHP.ini中的设置是全局性的,我们不能为您单独某个用户直接修改全局配置信息,但您可以通过error_reporting这个php函数来调整您所运行的脚本的错误信息输出,例如:
error_reporting(E_ALL^E_NOTICE^E_WARNING);
可以关闭所有notice 和 warning 级别的错误。
把这个语句放在您脚本的功用包含文件中,通常为config.php 或者conn.php 中就可以控制输出了。

Configure locale

RUN echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale

Set my timezone

RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime

User password

RUN adduser homestead;
usermod -p $(echo secret | openssl passwd -1 -stdin) homestead

解决curl访问https的证书问题

RUN printf "[openssl]\n" | tee -a /etc/php/7.2/fpm/php.ini;
printf "openssl.cainfo = /etc/ssl/certs/ca-certificates.crt\n" | tee -a /etc/php/7.2/fpm/php.ini

RUN printf "[curl]\n" | tee -a /etc/php/7.2/fpm/php.ini;
printf "curl.cainfo = /etc/ssl/certs/ca-certificates.crt\n" | tee -a /etc/php/7.2/fpm/php.ini

log_errors = Off

RUN wget http://curl.haxx.se/ca/cacert.pem --directory-prefix=/etc/php/7.2/extras/ssl
RUN echo 'curl.cainfo = "ssl/cacert.pem"' >> /etc/php/7.2/apache2/php.ini
RUN echo 'curl.cainfo = "ssl/cacert.pem"' >> /etc/php/7.2/cli/php.ini
echo 'openssl.cafile = "/etc/ssl/certs/cacert.pem"' >> /etc/php5/cli/php.ini &&
echo 'openssl.cafile = "/etc/ssl/certs/cacert.pem"' >> /etc/php5/apache2/php.ini &&
echo 'curl.cainfo = "/etc/ssl/certs/cacert.pem"' >> /etc/php5/cli/php.ini &&
echo 'curl.cainfo = "/etc/ssl/certs/cacert.pem"' >> /etc/php5/apache2/php.ini &&

RUN sed -i 's/;date.timezone =/date.timezone = PRC/' /etc/php.ini
RUN sed -i 's/display_errors = Off/display_errors = On/' /etc/php.ini
RUN sed -i 's/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/error_reporting = E_ALL/' /etc/php.ini
RUN mkdir -p /opt/cacert
COPY files/cacert.pem /opt/cacert
RUN sed -i 's|;curl.cainfo =|curl.cainfo = /opt/cacert/cacert.pem|' /etc/php.ini
```

`