file_exists() returns false, but the file DOES exist

后端 未结 14 1205
一向
一向 2020-12-05 09:40

I\'m having a very weird issue with file_exists(). I\'m using this function to check if 2 different files in the same folders do exist. I\'ve double-checked, they BOTH do ex

相关标签:
14条回答
  • 2020-12-05 10:12

    file_exists() just doesn't work with HTTP addresses.

    It only supports filesystem paths (and FTP, if you're using PHP5.)

    Please note:

    Works :

    if  (file_exists($_SERVER['DOCUMENT_ROOT']."/folder/test.txt") 
        echo "file exists";
    

    Does not work:

    if (file_exists("www.mysite.com/folder/test.txt") 
        echo "file exists";
    
    0 讨论(0)
  • 2020-12-05 10:12

    I found that what works for me to check if a file exists (relative to the current php file it is being executed from) is this piece of code:

    $filename = 'myfile.jpg';
    $file_path_and_name = dirname(__FILE__) . DIRECTORY_SEPARATOR . "{$filename}";
    if ( file_exists($file_path_and_name) ){
      // file exists. Do some magic...              
    } else {
      // file does not exists...
    }
    
    0 讨论(0)
  • 2020-12-05 10:12

    I have a new reason this happens - I am using PHP inside a Docker container with a mounted volume for the codebase which resides on my local host machine.

    I was getting file_exists == FALSE (inside Composer autoload), but if I copied the filepath into terminal - it did exist! I tried the clearstatche(), checked safe-mode was OFF.

    Then I remembered the Docker volume mapping: the absolute path on my local host machine certainly doesn't exist inside the Docker container - which is PHP's perspective on the world.

    (I keep forgetting I'm using Docker, because I've made shell functions which wrap the docker run commands so nicely...)

    0 讨论(0)
  • 2020-12-05 10:13

    A very simple trick is here that worked for me.

    When I write following line, than it returns false.

    if(file_exists('/my-dreams-files/'.$_GET['article'].'.html'))
    

    And when I write with removing URL starting slash, then it returns true.

    if(file_exists('my-dreams-files/'.$_GET['article'].'.html'))
    
    0 讨论(0)
  • 2020-12-05 10:13

    I spent the last two hours wondering what was wrong with my if statement: file_exists($file) was returning false, however I could call include($file) with no problem.

    It turns out that I didn't realize that the php include_path value I had set in the .htaccess file didn't carry over to file_exists, is_file, etc.

    Thus:

    <?PHP
    // .htaccess php_value include_path '/home/user/public_html/';
    
    // includes lies in /home/user/public_html/includes/
    
    //doesn't work, file_exists returns false
    if ( file_exists('includes/config.php') )
    {
         include('includes/config.php');
    }
    
    //does work, file_exists returns true
    if ( file_exists('/home/user/public_html/includes/config.php') )
    {
        include('includes/config.php');
    }
    ?>
    

    Just goes to show that "shortcuts for simplicity" like setting the include_path in .htaccess can just cause more grief in the long run.

    0 讨论(0)
  • 2020-12-05 10:16

    Just my $.02: I just had this problem and it was due to a space at the end of the file name. It's not always a path problem - although that is the first thing I check - always. I could cut and paste the file name into a shell window using the ls -l command and of course that locates the file because the command line will ignore the space where as file_exists does not. Very frustrating indeed and nearly impossible to locate were it not for StackOverflow.

    HINT: When outputting debug statements enclose values with delimiters () or [] and that will show a space pretty clearly. And always remember to trim your input.

    0 讨论(0)
提交回复
热议问题