phpfile_exists返回false,即使文件存在于我的linux上


php file_exists is returning false even if file exist on my linux

这个问题被问了很多次,但我找到的答案都对我没有帮助。

我正在尝试让php file_exists()工作。当php文件与要在其上使用file_exist()的文件在同一目录中并且仅使用文件名(即排除路径)时,它才起作用。但这不是后果性行为,请参阅下文。

Som信息:

  • safe_mode=关闭
  • 目录28没有符号链接
  • 文件名中没有空格
  • /var/www/html/smic/upload/28/中的所有目录都具有apache:apache777权限
  • 使用php 5.3

PHP:

echo getcwd()
clearstatcache();
$file = 'file:///var/www/html/smic/upload/28/ul.txt';
//Also tried like this
//$file = '/var/www/html/smic/upload/28/ul.txt';
if(file_exists($file)){
    echo $file." exists";
}

getcwd()打印/var/www/html/smic/modules/core/cticket

php脚本和要检查的文件的权限是apache:apache777。

关于目录结构的一些细节:

[root@localhost 28]# pwd
/var/www/html/smic/upload/28
[root@localhost 28]# ls -l ul.txt
-rw-r--r--. 1 apache apache 2 Feb  9 10:50 ul.txt
[root@localhost 28]# chmod 777 ul.txt
[root@localhost 28]# ls -l ul.txt
-rwxrwxrwx. 1 apache apache 2 Feb  9 10:50 ul.txt

更改文件的权限后,行为没有改变。目录/28具有drwxr-xr-x。适用于apache用户和apache组

为了进行测试,我还将实际的php脚本移动到/28,赋予它apache:apache777的权限。将$file更改为"ul.txt"(即$file='ul.txt';)。这样就可以找到ul.txt文件。

getcwd()打印/var/www/html/smic/upload/28

在另一次测试中,我试图在"ticket"目录中找到除路径之外的另一个文件,但该文件无法识别。

我撞到头了。。。

欢迎提出任何建议。

php仅凭文件权限不足以评估file_exists。运行php的进程还需要访问该文件的所有父目录的权限

逐一检查,验证php是否可以读取并输入(r-x)

ls -ald /var
ls -ald /var/www
ls -ald /var/www/html
ls -ald /var/www/html/smic
ls -ald /var/www/html/smic/upload
ls -ald /var/www/html/smic/upload/28

在这里抓救命稻草。。。

尝试使用su-apache(或者您的Web服务器以..apache2、www数据等形式运行的任何用户),然后遍历目录。

你的apache配置上是否有.htaccess文件或其他限制?

天哪,这是一个漂亮的凝灰岩。当我从网上复制任何东西时,我总是确保首先将其粘贴到普通的文本编辑器中,以删除所有奇怪/隐藏的字符,然后再次复制任何东西并将其粘贴在我的开发工具中。

正如我在评论中提到的,我做了pwd并将文本从我的虚拟服务器复制到我的osx。但我没有想到/知道的是,如果我在linux服务器上这样做,奇怪/隐藏的字符可能会随之而来,因此我没有确保通过文本编辑器复制所有内容。

我记得很久以前我从网上复制时遇到了问题,我想这可能是类似的问题。我在一个十六进制编辑器中打开了我的脚本。我发现了什么…"/var看起来很轻:"ï»?/var/"。删除奇怪的字符解决了问题。

感谢大家的评论。希望这些能帮助其他人,也许它在我不知情的情况下帮助了我(因为我根据你的评论做了很多事情)。

文件夹的访问权限是什么?路径CCD_ 1是不正确的。尝试将php脚本复制到文件夹上传和file='28/ul.txt';。文件夹必须可读。

尝试使用$file='/upload/28/ul.txt'打开文件;

在php.net手册中,"一旦失败,就会发出E_WARNING。"请确保错误报告设置为显示警告的级别,然后重试。

此外,"对于由于安全模式限制而无法访问的文件,此函数将返回FALSE。但是,如果这些文件位于safe_mode_include_dir中,则它们仍然可以包含在内。"。您不是在php安全模式下运行的,是吗?phpinfo()应该会告诉您。

php文件位于哪里?如果在"html"文件夹中,则使用类似$file = "smic/upload/28/ul.txt"; 的相对路径

也许,在文件名中有一个空白符号。这很重要。

相关文章: