我有一个在require_once()语句中失败的PHP脚本,我无法弄清楚原因。以下是我提出的一些测试代码:
if(require_once("lib/modules/events/events.inc.php")){ print "Events module loaded!"; }
if(require_once("lib/modules/events/bills.inc.php")){ print "Bills module loaded!"; }
第一行正常。
第二行失败。如果我尝试注释掉第一行并单独运行第二行,我会得到一个空白页面,服务器发送的标题会说“" 500内部服务器错误。”#34;
据我所知,Apache没有记录此错误。只有一个error_log文件(我检查了所有vhost,它们都使用默认的error_log)。如果我tail -f /var/log/httpd/error_log
并重现问题,则不会记录任何内容。
我已经验证这两个文件存在于同一目录中,并具有相同的权限:
# ls -hal *.inc.php
-rwxrwxr-x. 1 wdmartin wdmartin 83K Aug 15 11:30 bills.inc.php
-rwxrwxr-x. 1 wdmartin wdmartin 15K Mar 5 2015 events.inc.php
由于服务器是带有SE Linux的RHEL,我已经检查过它们都具有相同的SE Linux安全上下文:
# ls -Z *.inc.php
-rwxrwxr-x. wdmartin wdmartin unconfined_u:object_r:httpd_sys_content_t:s0 bills.inc.php
-rwxrwxr-x. wdmartin wdmartin unconfined_u:object_r:httpd_sys_content_t:s0 events.inc.php
根据get_include_path
,包含路径以.
开头,这应该有效,因为路径是相对于执行脚本而构建的。它适用于events.inc.php文件。它只是在同一文件夹中的bills.inc.php文件中无效。
我尝试在十六进制编辑器中打开这两个文件,以查看它们中的一个是否有UTF-8字节顺序标记,因为这些文件有时可能会破坏不了解它们的程序,但这两个文件都没有之一。
bills.inc.php文件在我们的开发服务器上工作正常,但不在生产中。我不明白。它应该工作。如果做不到这一点,它至少应该记录一个错误,告诉我到底出了什么问题。欢迎任何建议。
编辑:
为了记录,我已打开ini_set('display_errors', 1);
并设置error_reporting(E_ALL)
以进行调试。没有报告错误。如果我运行第二行,我会看到一个白屏。
编辑:
事实证明我打电话给ini_set
时出现了拼写错误,所以错误实际上并没有显示出来。一旦我修复它,结果证明是一个正常的解析错误。我很抱歉发布太快了。