【发布时间】:2018-03-31 21:56:36
【问题描述】:
我的 php 页面上出现“内部服务器错误”的问题。为了尝试调试它,我尝试在 php.ini 中使用 error_log 函数。但是我无法让它将任何内容写入错误日志。即使在一个简单的 php 文件中:
httpdocs/temp.php
<?php
error_log("this is an error");
echo "hello";
?>
我会收到一条基本的内部服务器错误消息:
Internal Server Error 服务器遇到内部错误或 配置错误,无法完成您的请求。
请联系服务器管理员告知时间 发生错误以及您可能做过的任何事情 导致错误。
有关此错误的更多信息可能在服务器错误中可用 记录。
xxxxxxxx.com 上的网络服务器
所以我查找了如何正确设置 error_log,认为它设置不正确。我找到了这个article。
由于我在 Windows 上,我编辑了 httpdocs 根文件夹中的 .user.ini 文件并添加了 error_log 行:
httpdocs/.user.ini
[PHP]
error_log=G:\PleskVhosts\xxxxxxxxxx.com\httpdocs\php_error.log
display_errors=off
log_errors=on
open_basedir="G:/PleskVhosts//xxxxxxxxx.com\;C:\Windows\Temp\"
safe_mode=off
sendmail_from=xxxxxxxxx@xxxxxxxxx.shr.prod.phx3.secureserver.net
SMTP=relay-hosting.secureserver.net
这个article帮我得到了绝对路径
我重新启动了 IIS 应用程序池并在我的 httpdocs 文件夹中创建了一个空的 php_error.log 文件,但是它仍然没有向日志文件写入任何内容,并且继续只给出内部服务器错误。我还尝试删除 .user.ini 文件中除 error_log 行之外的所有其他行,重新启动,但仍然没有。我也试过停止应用程序池并重新启动它,仍然没有。
我仔细检查了 phpinfo 并且 log_errors 字段设置为 on,并且为 error_log 设置了正确的目录。所以它正在查看 .user.ini 文件。
我尝试打电话给他们的支持,但他们无法帮助我。
他们将我链接到这个关于 IIS 错误处理的article。我创建了一个 web.config 文件并将其放在 httpdocs 文件夹中,如该文章中所述。现在我得到了一些不同的东西。现在我的页面的输出是我传递给 error_log 的错误。换句话说,当我访问 test.php 时,屏幕上的输出显示:
这是一个错误
注意到错误后 php 脚本是如何死掉的吗?不仅错误不应该显示在屏幕上(它应该放在 php_error.log 文件中,此时仍然没有被写入),而且 php 脚本不应该在之后死掉,除非它遇到致命错误.我应该从回声中看到“你好”,但我没有。
我必须做些什么才能使其正常工作?
我的托管计划安装了 IIS 8 和 PHP 5.4。
PS。他们的支持基本上说他们无法进一步帮助我,因为更改配置文件是“编码”并且他们不提供编码支持。
【问题讨论】:
-
PHP 5.4 早就死了,所以你必须使用更新的版本。 Jexus Manager 提供 PHP 诊断,可以显示您在 IIS 上的 PHP 注册是否损坏,jexusmanager.com/en/latest/tutorials/php-diagnostics.html
-
即使我更新到 PHP 6 也是一个问题。问题是 Godaddy 设置了 PHP 默认没有文件权限。因此,每次它尝试访问 error_log 文件时都会失败并崩溃。一旦我给了 PHP 应用程序文件权限,它就起作用了。