Linux:文件既存在又不存在

时间:2011-12-13 07:22:13

标签: php linux bash

我正在编写一个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

2 个答案:

答案 0 :(得分:9)

小心切换操作系统,因为有些是区分大小写的,有些则不是。

我使用我的Mac进行开发(不区分大小写),因此对于file_exists()或include_once()等使用什么外壳并不重要。然后我部署到Ubuntu 11(区分大小写),并且我的所有包含已停止工作。我怀疑你有同样的问题。

对我来说棘手的部分是,在使用git时,我的版本控制没有检测到文件名中的更改作为修改。我实际上必须使用某种前缀重命名每个文件,提交和部署,将它们重命名为它们应该是什么(具有一致的大写!),最后再次提交和部署。这是一个彻头彻尾的痛苦。

故事的道德 - 生产系统的代码,而不是您的开发系统。

答案 1 :(得分:5)

仔细查看文件名:

AdminIpv4RangeAddFormHandler  # from PHP
AdminIpv4RangeAddFormHandler  # from find command
AdminIPv4RangeAddFormHandler  # from ls output
      ^

您应该选择IPIp并坚持决定无处不在