这个问题已被多次询问,但我找到的答案都没有帮助我。
我想让php file_exists()工作。它工作的唯一场景是当php文件与使用file_exist()的文件位于同一目录中并且仅使用文件名(即排除路径)时。但这不是后续行为,请参阅下文。
Som信息:
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组
为了测试,我还将实际的php脚本移动到/ 28,给它apache:apache 777 rigths。将$文件更改为“ul.txt”(即$ file ='ul.txt';)。这工作,找到ul.txt文件。
getcwd()然后打印/ var / www / html / smic / upload / 28
作为另一个测试我试图找到另一个文件,不包括“ticket”目录中的路径,该文件无法识别。
我在敲我的脑袋......
任何建议表示赞赏。
答案 0 :(得分:7)
单独的文件权限不足以让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
答案 1 :(得分:2)
抓住吸管......
尝试su - apache(或者你的网络服务器运行的任何用户,如apache2,www-data等......),然后遍历目录。
是否有任何针对您的apache配置的.htaccess文件或任何其他限制?
答案 2 :(得分:2)
哎呀,这是一个很棒的凝灰岩。我总是确保当我从网上复制任何内容时,首先将其粘贴到普通的texteditor中以删除所有奇怪/隐藏的字符,然后再将其复制并粘贴到我的开发工具中。
正如我在评论中提到的那样,我做了pwd并将我的虚拟服务器的文本复制到了我的osx。但是我没有想到/知道的是,如果我从我的linux服务器那样做,可能会出现奇怪/隐藏的角色,因此我没有确保通过texteditor复制所有内容。
我记得很久以前当我从网上复制时我遇到了问题,并认为这可能是一个类似的问题。我在十六进制编辑器中打开了我的脚本。我发现了什么...'/ var'看起来像这样:'/ var'。删除奇怪的字符修复了问题。
感谢大家的上述评论。希望那些可以帮助别人,也许它甚至不知道它帮助了我(因为我根据你的评论做了很多事情)。
答案 3 :(得分:1)
该文件夹的访问权限是什么?
路径$file = 'file:///var/www/html/smic/upload/28/ul.txt';
不正确。
尝试将php脚本副本复制到文件夹上传和file='28/ul.txt';
。
该文件夹必须是可读的。
答案 4 :(得分:1)
尝试使用$ file ='/ upload / 28 / ul.txt';
打开文件答案 5 :(得分:0)
从php.net手册,“失败时,会发出E_WARNING。”确保将错误报告设置为显示警告的级别并进行尝试。
此外,“由于安全模式限制,此函数对于无法访问的文件返回FALSE。但是,如果这些文件位于safe_mode_include_dir中,则仍然可以包含这些文件。”你没有在php安全模式下运行吗? phpinfo()应该告诉你。
答案 6 :(得分:0)
你的php文件在哪里?如果在" html"文件夹,然后使用相对路径,如$file = "smic/upload/28/ul.txt";
答案 7 :(得分:0)
也许,在文件的名称中有一个空白符号。这很重要。