10
回答
PHP:文件存在但使用file_exists函数返回false
注册华为云得mate10,2.9折抢先购!>>>   

操作环境:OS X 10.9.4

运行环境:自带的apache服务和php,版本分别是Apache/2.2.26 (Unix)和PHP 5.4.24 (cli)

项目根目录为:/Users/username/Sites/tu/

服务器根目录为:/Users/username/Sites/

我想读取/Users/username/Documents/icoder/backup文件夹下的文本文件,但使用file_exists函数却返回false,参数为文件的绝对路径。

读取项目根目录下的文件则返回true。

请问我遇到的问题是什么情况,有什么解决方案吗?

局部代码:

    $path = "/Users/username/Documents/icoder/backup/test.txt";
    if (!file_exists($path)) {
        echo 'File not found';
    }
    echo '<br>';




PHP
举报
强船生
发帖于3年前 10回/6K+阅
共有10个答案 最后回答: 3年前

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

引用来自“强船生”的评论

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

光文件777权限是不够的,还需要php的执行帐号对该文件的所有父目录有读权限

引用来自“欣儿”的评论

可以,用···返回到相同的根目录,再去访问你要访问的路径,不然就是以设置的根目录为主要根目录

我用以下路径访问过:

../../Documents/icoder/backup

结果是一样的,file_exists返回false

我不太明白你说的“以设置的根目录为主要根目录“是什么意思

具体应该怎么操作呢

--- 共有 3 条评论 ---
欣儿再取消一个… 3年前 回复
欣儿前面再加个/,用绝对路径 3年前 回复
欣儿具体不知道你的wwwroot的路径在哪,不好说。不过wwwroot和要访的不在wwwroot内,比如1/2/3,而1和wwwroot同级,那访问3文件,就是/···/1/2/3,这样,返回到有相同的根目录后再写要访问的路径 3年前 回复
继续等,对这个问题感到非常棘手,如果php无法访问项目外的本地文件,我也就释然了,望高手解惑
--- 共有 2 条评论 ---
欣儿不能访问项目外的本地文件是不可能的,session就得访问项目外得文件 3年前 回复
flydo那你就释然吧。php要是能读到其他项目外的,那有多不安全。 3年前 回复

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

引用来自“leo108”的评论

要么是权限问题,要么就是设置了open_basedir

引用来自“强船生”的评论

我对需要读取的文件执行了 chmod 777 命令,权限没有问题,刚刚查询了php.ini和httpd.conf,里面的open_basedir没有赋值,请问有没有问题,还有没有其他地方会使用到open_basedir?

引用来自“leo108”的评论

光文件777权限是不够的,还需要php的执行帐号对该文件的所有父目录有读权限

我该怎样得知php的执行帐号有没有该权限呢

具体的代码如下:

if (!file_exists("/Users/username/Documents/icoder/backup/test.txt")) {
        echo 'File not found';
    }
    echo '<br>';
    readfile("/Users/username/Documents/icoder/backup/test.txt");



项目根目录为: /Users/username/Sites/tu/

--- 共有 8 条评论 ---
强船生回复 @欣儿 : 谢谢 问题解决了 是该文件夹的上级目录及上级目录没有apache的访问权限导致的 再次感谢 3年前 回复
强船生回复 @欣儿 : 这样做还是找不到文件 3年前 回复
强船生回复 @欣儿 : /../Documents/icoder/backup/test.txt 这样子吗 3年前 回复
欣儿前面加个/,用绝对路径 3年前 回复
强船生回复 @欣儿 : ../Documents/icoder/backup/test.txt 是这样子的吗 3年前 回复
顶部