2

「photoA」または「photoB」という名前の 2 つのディレクトリのいずれかにある画像ファイル名を探してエコーする必要があります。

これは、指定されたファイルを探して、これらのディレクトリをクロールしようとするコードです。

$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.";
    }
}

私はそれから離れているように感じます。

4

3 に答える 3

2

では URL を使用できませんfile_exists。サーバーのファイル システムで絶対パスまたは相対パス (runnings スクリプトに関連する) を使用する必要があります。次に例を示します。

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

正確なパスがわからない場合は、Web サーバーのルートからの相対パスを使用して、その前にドキュメント ルートを追加することもできます。

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

(または、使用する場所で一度使用しますfile_exists()

于 2013-06-11T18:03:23.133 に答える
1

Web サイトのルート ディレクトリ内からこのスクリプトを実行しているため、「http://www.mydomain.com/」を定義する必要はありません。これは、絶対/相対ファイルではないため、アクセス拒否の問題が発生するためです。道。代わりに、images/ フォルダーが PHP スクリプトと同じディレクトリ レベルにある場合、必要なことは次のとおりです。

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

それ以外の場合は、必要に応じて絶対パスを追加して機能させますが、. 残りはうまくいくはずです。

于 2013-06-11T18:03:05.670 に答える
0

他の人が言ったように、file_exists()ローカルファイル用です。

本当に http 経由でファイルを探す必要がある場合は、次を使用できます。

$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;
}

注: これは、イメージが存在しない場合にサーバーが 404 を返すことに依存しています。サーバーが代わりにインデックス ページまたは適切にコード化されたエラー ページにリダイレクトすると、偽の成功が得られる可能性があります。

于 2013-06-11T18:07:19.127 に答える