我正在编写一个PHP应用程序,我刚刚遇到了一个非常奇怪的错误。在最近迁移到新的(Ubuntu)服务器之后,我开始在require_once语句上遇到致命错误。显然文件不存在,或文件权限错误,对吗?
不,事实证明:
文件确实存在
该文件从SVN存储库中签出。当我进入文件夹并列出文件( ls 或 ls -l </ em>)时,文件显然在那里并且文件大小正确。当我更新存储库中的文件并更新工作副本时,更改将复制到工作副本。该文件具有权限755,因此每个人都应该能够看到并阅读它。同一目录中的其他文件正常工作。
该文件也不存在:
PHP退出时发生致命错误,因为无法找到该文件。如果我使用 find 命令,则找不到该文件。如果我尝试使用 nano 编辑文件,它声称它不存在。如果我开始输入文件名并按Tab键自动完成,则无法找到该文件。
此行为现在发生在两个单独的服务器上,但它在第三台服务器上正常工作。所有服务器都运行Ubuntu 10.04。
有谁知道发生了什么事?
编辑:
文件名是AdminIpv4RangeAddFormHandler.inc。
完整错误消息,文件路径模糊:
Warning: require_once(fullpath/AdminIpv4RangeAddFormHandler.inc): failed to open
stream: No such file or directory in fullpath/anotherfile.inc on line 34 Fatal error:
require_once(): Failed opening required 'fullpath/AdminIpv4RangeAddFormHandler.inc'
(include_path='.:/usr/share/php:/usr/share/pear') in fullpath/anotherfile.inc on line
34
以下命令不产生输出:
find -name AdminIpv4RangeAddFormHandler.inc -ls
常规 ls -li 输出(以及其他)此行:
2233407 -rwxr-xr-x 1 root root 1597 2011-12-13 08:02 AdminIPv4RangeAddFormHandler.inc
答案 0 :(得分:9)
小心切换操作系统,因为有些是区分大小写的,有些则不是。
我使用我的Mac进行开发(不区分大小写),因此对于file_exists()或include_once()等使用什么外壳并不重要。然后我部署到Ubuntu 11(区分大小写),并且我的所有包含已停止工作。我怀疑你有同样的问题。
对我来说棘手的部分是,在使用git时,我的版本控制没有检测到文件名中的更改作为修改。我实际上必须使用某种前缀重命名每个文件,提交和部署,将它们重命名为它们应该是什么(具有一致的大写!),最后再次提交和部署。这是一个彻头彻尾的痛苦。
故事的道德 - 生产系统的代码,而不是您的开发系统。
答案 1 :(得分:5)
仔细查看文件名:
AdminIpv4RangeAddFormHandler # from PHP
AdminIpv4RangeAddFormHandler # from find command
AdminIPv4RangeAddFormHandler # from ls output
^
您应该选择IP
或Ip
并坚持决定无处不在。