开发者社区> 问答> 正文

PHP:文件存在但使用file_exists函数返回false:报错

操作环境: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>';




展开
收起
kun坤 2020-06-06 16:10:12 1632 0
1 条回答
写回答
取消 提交回答
  • 引用来自“leo108”的评论

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

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

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

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

    ######我这个是路径访问的问题吗,php只能访问项目内的文件吗,外部文件无法访问吗?######可以,用···返回到相同的根目录,再去访问你要访问的路径,不然就是以设置的根目录为主要根目录######

    引用来自“欣儿”的评论

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

    我用以下路径访问过:

    ../../Documents/icoder/backup

    结果是一样的,file_exists返回false

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

    具体应该怎么操作呢

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

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

    ######

    引用来自“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/

    ######回复 @欣儿 : 谢谢 问题解决了 是该文件夹的上级目录及上级目录没有apache的访问权限导致的 再次感谢######回复 @欣儿 : 这样做还是找不到文件######回复 @欣儿 : /../Documents/icoder/backup/test.txt 这样子吗######前面加个/,用绝对路径######回复 @欣儿 : ../Documents/icoder/backup/test.txt 是这样子的吗
    2020-06-06 16:10:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
PHP安全开发:从白帽角度做安全 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载