我有一个非常愚蠢的问题,我不知道如何解决它。我的一位客户希望我在他的网站上放一个简单的PHP脚本,该脚本托管在Windows / PHP共享主机上。
问题是,他们已禁用错误报告,我无法访问错误日志。我唯一得到的是
由于发生内部服务器错误,无法显示页面。
我试过了
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
foreach(1 as $i);
?>
但它没有改变任何东西,我仍然得到通用500错误。还有其他方法可以让PHP显示错误消息吗?托管技术支持完全没有响应,但我想以某种方式解决这个问题,即使有一些hackery,这意味着我不关心解决方案有多脏,我关心的是我可以看到错误消息详细地。
我试图添加自定义错误处理程序,你们建议,但我仍然得到500页,没有写错误日志
<?php
date_default_timezone_set("Europe/Prague"); // tried commenting this line out, didn't help
function fileLogHandler($errno, $errstr, $errfile, $errline) {
$logFile = "error.log";
$f = fopen($logFile, "a") or die("Couldn't open log file for write");
fwrite($f, strftime("%c") . " $errstr on line $errline\nin file $errfile\n\n");
}
set_error_handler("fileLogHandler");
foreach(1 as $i);
?>
当我在本地计算机上执行此操作时,它按预期工作
$ php -f test.php && cat error.log
Fri Oct 28 15:40:14 2011 Invalid argument supplied for foreach() on line 12
in file /Users/darth/Sites/shalamar/test.php
但它在主机上不起作用......
我试图将整个脚本愚蠢到
<?php
$logFile = "error.log";
$f = fopen($logFile, "a");
fwrite($f, "Hi");
?>
并最终意识到,我可能没有该文件夹的写权限。问题是,它是一个Windows服务器,如果我尝试通过FileZilla更改权限,我会很开心
Command: SITE CHMOD 666 error.log
Response: 500 'SITE CHMOD 666 error.log': command not understood
我试图谷歌周围,看起来我无法通过FTP设置文件权限。
通过电子邮件发送日志也会导致500错误
mail("[email protected]", "Voice of desperation");
现在有什么建议?
更新:感谢到目前为止的所有建议,但我发现我甚至无法访问文件系统,因此我无法写入日志文件。至少那是它的样子,所以我和技术支持人员谈过,他们说他们会在下周内调查它。
这就是错误日志的用途。
尝试在同一目录中创建.user.ini
或php.ini
文件
error_log = phperrors.log
(首选绝对路径)
然后再次运行您的脚本,然后查找此文件及其内容。
如何使用set_error_handler()然后将错误消息写入文件?
通过电子邮件获取PHP错误:
function custom_error_handler ($errno, $errstr, $errfile, $errline){
$content = "Time ".date("d.m.Y G:i")."\n\n";
$content .= "Error No: ".$errno."\n";
$content .= "Error String: ".$errstr."\n";
$content .= "Error File: ".$errfile."\n";
$content .= "Error Line: ".$errline."\n\n";
mail("[email protected]", "[ERROR HANDLER]", $content);
}
set_error_handler ("custom_error_handler");