这个问题已经被问了很多次了,但是我find的答案都没有帮到我。
我正在试图让php file_exists()工作。 当它工作的唯一情况是当php文件是在文件相同的目录中使用file_exist()和只使用文件名(即不包括path)。 但这不是随之而来的行为,请看下面。
索姆信息:
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 / ticket
php脚本的权限和要检查的文件是apache:apache 777。
有关目录结构的一些细节:
[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组
为了testing,我也把实际的php脚本移到了/ 28,给了它apache:apache 777 rigths。 将$文件更改为“ul.txt”(即$ file ='ul.txt';)。 这工作,findul.txt文件。
getcwd()打印然后/ var / www / html / smic / upload / 28
作为另一个testing,我试图find另一个文件,不包括“ticket”目录中的path,文件不被识别。
我正在敲我的头
任何意见表示赞赏。
单独的文件许可不足以让php评估file_exists。 运行php的进程也需要权限遍历该文件的所有父目录才能到达它。
检查他们一个接一个,并验证PHP可以读取和输入(Rx)
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
抓在这里的秸秆…
尝试苏 – 阿帕奇(或无论你的网络服务器运行的用户.. Apache2,万维网数据等..),然后遍历目录。
是否有任何.htaccess文件,或您的Apache配置上的任何其他限制?
哎,这是一个非常凝灰岩的。 我总是确保当我从网上复制任何东西,首先粘贴到一个正常的texteditor为了删除所有奇怪的/隐藏的字符,然后复制什么,并粘贴到我的开发工具。
正如我在评论中提到的,我做了pwd,并将我的虚拟服务器的文本复制到我的osx。 但是,我没有想到/知道的是,如果我从我的Linux服务器上做到这一点,奇怪的/隐藏的字符可以遵循,因此我没有确保通过texteditor复制所有的东西。
我记得很早以前我从网上复制出来的问题,并认为这可能是一个类似的问题。 我用十六进制编辑器打开了我的脚本。 我发现了什么…'/ var'看起来很简洁:'/ var'。 去除奇怪的字符解决了这个问题。
谢谢大家以上的意见。 希望那些可以帮助别人的人,也许甚至不知道它帮助了我(因为我根据你的意见做了很多事情)。
关于文件夹的访问权限是什么? 路径$file = 'file:///var/www/html/smic/upload/28/ul.txt';
是不正确的。 尝试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";
也许,在文件的名称中有一个空格符号。 这一点很重要。