1

ファイルが実行されているサーバーの外部にファイルが存在するかどうかを確認するには、PHP を使用する必要があります。この質問は、サーバー上のファイルを確認する方法に完全に答えます。

PHP の file_exists() は機能しませんか?

...しかし、PHP がホストされているネットワーク上の別のサーバーにあるファイルをチェックする必要があります。これは可能ですか?

4

5 に答える 5

2

間接的に可能。いつでも HEAD リクエストを送信して、リクエストされたリソースに対してサーバーから HTTP 200 が返されているかどうかを確認できます。それが役に立てば幸い。

于 2013-09-20T11:37:35.487 に答える
2

考えられる解決策は次の 2 つです。

  1. ファイルが存在するファイルシステム/ディレクトリをサーバー 2 にエクスポートして、サーバー 1 にマウントできるようにします。たとえば、NFS または CIFS (SMB/Samba) を使用できます。次に、ファイルシステムをマウントしたパスで file_exists を使用すると、ローカル ファイルのように機能します。

  2. ファイルの存在を確認できるサービスをサーバー 2 で実行します。たとえば、サーバー 2 にも Web サーバーをインストールし、file_exists を実行する短い PHP スクリプトを記述して、たとえば 1 または 0 のみをテキストとして返すことができます。次に、サーバー 1 からその URL を要求し、結果を処理できます。

于 2013-09-20T11:39:32.127 に答える
0

ファイルがサーバーに存在するかどうかを確認する方法はなく、これが 100% 正しいことを確認する方法はありません。ファイルの権利のため。

ファイルのダウンロードを試みることができ、それを読み取る権利がある場合は、fopen() file_get_contents() などの関数を使用できます。

http ポートで接続を開いて、答えが 200 かどうかを確認することもできます。そうであれば、ファイルが存在します。

fopen と file_get_contents を使用する場合は、 allow_url_fopenがTRUEに設定されているかどうかを確認する必要があります。

マニュアルのfile_exists () ページにコードがあります:

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

あなたもそれを使うことができます。

于 2013-09-20T11:49:30.233 に答える
0

curlのように使用してみてください。

$ch = curl_init("http://www.example.com/file.jpg");

curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$retcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// $retcode > 400 -> not found, $retcode = 200, found.
curl_close($ch);
于 2013-09-20T11:38:55.917 に答える