Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP File Exists Always False

I have a case where file_exists() is always returning false. My latest attempt was to just test to see if it would return true for $_SERVER["SCRIPT_FILENAME"] and then return the value of the path if it couldn't find the file which it does.

The path while not necessarily relevant to solving the problem is: /Users/joe/Workspace/720/app/webroot/index.php

I have obviously verified that the file is there, and am not even sure how it couldn't be there since php is serving it up.

I should mention this is on an install of OS X Snow Leopard running PHP 5.3.0.

Any ideas would be fantastic.

CODE SAMPLE:

if (!file_exists($_SERVER["SCRIPT_FILENAME"]))
    $errors[] = 'Cant find:'. $_SERVER["SCRIPT_FILENAME"];
like image 367
Joe Avatar asked Nov 25 '09 19:11

Joe


People also ask

How do you check is file exist in PHP?

The file_exists() function checks whether a file or directory exists.

Does exist in PHP?

PHP isset() Function The isset() function checks whether a variable is set, which means that it has to be declared and is not NULL. This function returns true if the variable exists and is not NULL, otherwise it returns false.

How create file if not exist in PHP?

PHP Create File - fopen() The fopen() function is also used to create a file. Maybe a little confusing, but in PHP, a file is created using the same function used to open files. If you use fopen() on a file that does not exist, it will create it, given that the file is opened for writing (w) or appending (a).


4 Answers

I just experienced this issue and have been stuck on it for the past couple hours. The answer is that you need to specify the ABSOULTE path in order for file_exists() to work. You can NOT use relative paths such as 'dir1/images/image.jpg' or '../../images/image1.jpg'. You need to specify '/rootdir/subdir/dir1/images/myimage.jpg'.

That's what worked for me anyway.

like image 86
Paul Avatar answered Oct 20 '22 23:10

Paul


It's probably a file permission issue. Make sure the file you are testing for is accessible by _www user (which is the user used to run apache {httpd} on Mac OS X).

Maybe you can try testing for a file on /tmp with 777 as it permission bits.

Hope it helps.

like image 31
Pablo Santa Cruz Avatar answered Oct 21 '22 01:10

Pablo Santa Cruz


From the php manual on file_exists()

This function returns FALSE for files inaccessible due to safe mode restrictions. However these files still can be included if they are located in safe_mode_include_dir.

That's only a guess, a code sample may make things clearer.

Another reason file_exists() may not be able to access the file (not safe mode related):

Note: The check is done using the real UID/GID instead of the effective one.

This script works fine on my linux box (it's pretty much the example you added):

<?php
  if (file_exists($_SERVER["SCRIPT_FILENAME"])){
    echo "Found File: ";
  } else {
    echo "No File: ";
  }

  echo $_SERVER["SCRIPT_FILENAME"];
?>
like image 42
Tim Lytle Avatar answered Oct 21 '22 01:10

Tim Lytle


Also check the parent directory, and all of their parents, to make sure that everyone has execute access.

If you're running this under Apache (instead of on the command line), remember that it runs under the _www user and _www group on Snow Leopard. So that's the group that needs access.

like image 45
JW. Avatar answered Oct 21 '22 00:10

JW.