mrtonyb
mrtonyb

Reputation: 615

PHP Search for image file in two specific directories

I need to look for and echo an image file name that's located in either of these two directories named 'photoA' or 'photoB'.

This is the code I started with that tries to crawl through these directories, looking for the specified file:

$file = 'image.jpg';    
$dir = array(
    "http://www.mydomain.com/images/photosA/", 
    "http://www.mydomain.com/images/photosB/"
);

foreach( $dir as $d ){
    if( file_exists( $d . $file )) {
        echo $d . $file;
    } else {
        echo "File not in either directories.";
    }
}

I feel like I'm way off with it.

Upvotes: 2

Views: 155

Answers (3)

jeroen
jeroen

Reputation: 91734

You cannot use a url in file_exists, you need to use an absolute or relative path (relative to the runnings script) in the file-system of the server, so for example:

        $dir = array(
            "images/photosA/", 
            "../images/photosB/", 
            "/home/user/www/images/photosB/"
        );

You can also use paths relative to the root of the web-server if you don't know the exact path and add the document root before that:

        $dir = array(
            $_SERVER['DOCUMENT_ROOT'] . "/images/photosA/", 
            $_SERVER['DOCUMENT_ROOT'] . "/images/photosB/"
        );

(or you use it once, where you use file_exists())

Upvotes: 2

Dylan N
Dylan N

Reputation: 517

Since you are running this script from within the root directory of your website, you won't need to define 'http://www.mydomain.com/' as this will cause Access Denied issues as it is not an absolute/relative file path. Instead, if the images/ folder is at the same directory level as your PHP script, all you will need to do is

$dir = array(
  "images/photosA/", 
  "images/photosB/"
);

Otherwise, just add the absolute path as needed to make it work, but you can not put the. The rest seems as if it should work fine.

Upvotes: 1

Alexandre Danault
Alexandre Danault

Reputation: 8672

As the others said, file_exists() is for local files.

If you REALLY need to look for files over http, you can use :

$file = 'http://www.domain.com/somefile.jpg';
$file_headers = @get_headers($file);
if($file_headers[0] == 'HTTP/1.1 404 Not Found') {
    $exists = false;
}
else {
    $exists = true;
}

NOTE: This relies on the server returning a 404 if the image does not exist. If the server instead redirects to an index page or a pporly-coded error page, you could get a false success.

Upvotes: 0

Related Questions