Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache PHP错误日志方法不存在';不要将错误写入我的错误日志文件_Apache_Logging_Php - Fatal编程技术网

Apache PHP错误日志方法不存在';不要将错误写入我的错误日志文件

Apache PHP错误日志方法不存在';不要将错误写入我的错误日志文件,apache,logging,php,Apache,Logging,Php,PHP error_log方法不会将错误写入自定义错误日志文件。它将只写入/var/log/apache2/php_error.log 以下是myphp.ini中的日志设置: error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE display_errors = Off log_errors = On log_errors_max_len = 0 ; also tried with 9999999 error_log = /var

PHP error_log方法不会将错误写入自定义错误日志文件。它将只写入/var/log/apache2/php_error.log

以下是my
php.ini
中的日志设置:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
log_errors = On
log_errors_max_len = 0 ; also tried with 9999999
error_log = /var/log/apache2/php_errors.log
PHP将其错误写入常规Apache错误日志(
/var/log/apache2/error.log
),而不是我上面指定的日志

我已经尝试过的事情:

  • 更改php.ini文件后,我停止并重新启动了apache
  • 文件
    /var/log/apache2/php_errors.log
    是777权限,并且该文件存在
  • 没有其他重写php.ini文件。(有/etc/php5/cli/php.ini,但我没有使用cli)
  • 在php.ini文件的后面没有其他可能会推翻第一个错误的错误设置
  • phpinfo()在本地值和主值下都表示error_log=/var/log/apache2/php_errors.log(即正确的文件)
  • 我用来生成错误的测试脚本不包含任何ini_集调用
  • (仅供参考:我正在Ubuntu 11.04上使用Apache/2.2.17和PHP/5.3.5-1ubuntu7.2)


    我做错了什么?

    删除php_errors.log并重新启动apache2,服务器本身将创建一个具有适当权限和所有者的新php_errors.log文件

    rm -f /var/log/apache2/php_errors.log
    service apache2 restart
    
    ll /var/log/apache2/php_errors.log
    

    您可以尝试这样指定文件名:

    我在Ubuntu上使用Apache2.2.22

    使用以下PHP命令:

    error_log("eric", 3, "/home/el/error.log");
    
    第一个参数是要发送到错误日志的消息。第二个参数
    3
    表示“预期文件名目的地。第三个参数是目的地。”

    创建文件/home/el/error.log并将其所有权设置为:

    el@apollo:~$ ll error.log
    -rwxrwxr-x 1 www-data www-data 7 Dec 13 14:30 error.log
    
    当PHP解释error_log方法时,它会将消息附加到文件中

    资料来源:

    您可以在VirtualHost站点配置文件中设置站点的错误日志文件,例如:
    /etc/apache2/sites enabled/example.com.conf

    <VirtualHost *:80>
    
      ....
    
      ErrorLog ${APACHE_LOG_DIR}/www.example.com-error.log
      LogLevel warn
      CustomLog ${APACHE_LOG_DIR}/www.example.com-access.log combined
    
    </VirtualHost>
    
    
    ....
    ErrorLog${APACHE_LOG_DIR}/www.example.com-error.LOG
    日志级别警告
    CustomLog${APACHE_LOG_DIR}/www.example.com-access.LOG
    
    在unix系统中,
    ${APACHE_LOG_DIR}
    通常是
    /var/LOG/apache2

    错误和访问将保存在
    ${APACHE\u LOG\u DIR}/www.example.com error.LOG
    ${APACHE\u LOG\u DIR}/www.example.com access.LOG

    我想回答这个问题,因为这在谷歌上是一个很高的结果,尽管这是一个老问题

    我通过为日志目录上的所有用户添加写权限来解决这个问题

    在我的例子中,用户“http”需要能够写入/var/log/httpd/所以我运行了

    # chmod a+w /var/log/httpd
    
    如果该文件已经存在,那么首先删除它并允许Apache创建它可能会有所帮助

    我的php.ini文件也包含了整个路径

    error_log = /var/log/httpd/php_errors.log
    

    今天我花了几个小时试图弄清楚为什么这不起作用,并试图调试代码,因为我可以将任何内容记录到php错误日志中。不用说,在日志工作开始之前,我一直在以蜗牛般的速度进行

    我猜90%以上的时间都是权限问题。在我的情况下,daemon是日志文件的所有者和组,我必须
    sudo su
    到root,然后更改日志文件的权限。我更改为:

    chmod 777 myphperor.log


    感谢上帝,stackoverflow.com

    请确保Apache用户至少对日志文件路径中的任何父文件夹具有执行权限。没有它,Apache无法列出文件夹中的任何内容,因此无法查看日志文件

    ls
    drwxr-x--- root adm folder
    
    chmod o+x folder
    
    ls
    drwxr-x--x root adm folder
    
    那一个真的抓住你了!;-)


    之后,还要检查Apache用户是否具有对实际日志文件的读写权限。

    我遇到了这个问题,然后我为Apache日志文件夹授予了正确的权限,然后使用以下命令重新启动了Apache:

    sudo chmod a+w /var/log/apache2/
    sudo service apache2 restart
    

    您是否尝试将文件名更改为其他文件?或者尝试其他文件夹?检查加载的php.ini文件(查看phpinfo()函数的输出)感谢Olli,我将其更改为/usr/php_errors.log,现在它可以工作了!很可能,您指定的日志文件或其中包含的文件夹的权限没有正确设置以允许php访问该文件。我没有看到php代码,但有两种可能:1.该设备已满。2.封闭目录缺少execute位,因此如果PHP检查文件是否存在,则会失败。简单解决方案:[确保您的Web服务器用户可以rwx目录,rw文件]。OP说他们已经检查了权限。您的答案没有添加任何内容。当您的答案为chmod 777时,很有可能不是正确的答案。谢谢。我在IIS服务器上遇到了这个问题。问题是该站点的某个部分需要基本身份验证,这导致该服务无法运行以具有不同权限的不同用户身份运行。