ファイルが実行されているサーバーの外部にファイルが存在するかどうかを確認するには、PHP を使用する必要があります。この質問は、サーバー上のファイルを確認する方法に完全に答えます。
...しかし、PHP がホストされているネットワーク上の別のサーバーにあるファイルをチェックする必要があります。これは可能ですか?
ファイルが実行されているサーバーの外部にファイルが存在するかどうかを確認するには、PHP を使用する必要があります。この質問は、サーバー上のファイルを確認する方法に完全に答えます。
...しかし、PHP がホストされているネットワーク上の別のサーバーにあるファイルをチェックする必要があります。これは可能ですか?
間接的に可能。いつでも HEAD リクエストを送信して、リクエストされたリソースに対してサーバーから HTTP 200 が返されているかどうかを確認できます。それが役に立てば幸い。
考えられる解決策は次の 2 つです。
ファイルが存在するファイルシステム/ディレクトリをサーバー 2 にエクスポートして、サーバー 1 にマウントできるようにします。たとえば、NFS または CIFS (SMB/Samba) を使用できます。次に、ファイルシステムをマウントしたパスで file_exists を使用すると、ローカル ファイルのように機能します。
ファイルの存在を確認できるサービスをサーバー 2 で実行します。たとえば、サーバー 2 にも Web サーバーをインストールし、file_exists を実行する短い PHP スクリプトを記述して、たとえば 1 または 0 のみをテキストとして返すことができます。次に、サーバー 1 からその URL を要求し、結果を処理できます。
ファイルがサーバーに存在するかどうかを確認する方法はなく、これが 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;
}
あなたもそれを使うことができます。
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);