URL画像ファイルを読み取ってサーバーに保存する非常に単純な機能があります。
function o99_download_shot_binary(){
$url = esc_url_raw( o99_get_content_link() ); // function returns http:// url
$img = $uploads['basedir'] . '/tmp/' . uniqid() . '.jpeg'; // name and location
file_put_contents($img, file_get_contents($url));
}
IT は正常に動作しますが、時々、o99_get_content_link() が無効な URL を返すため、空の画像が保存されるため、if ステートメントで簡単なチェックを行い、1 つのライナーを分離しました。
function o99_download_shot_binary(){
$url = esc_url_raw( o99_get_content_link() ); // function returns http:// url
$img = $uploads['basedir'] . '/tmp/' . uniqid() . '.jpeg'; // name and location
$file = file_get_contents($url);
if (file_exists($file)) {
file_put_contents($img, $file);
}
}
しかし、そうすると、画像は保存されません。
だから私はif文を
if ( $file) { file_put_contents($img, $file); }
..そして今それは動作します。
今はすべて問題ないので、なぜこの質問を投稿したのか疑問に思われるかもしれません。なぜなら、私が何をしているのかを理解したいからです - 私の質問は単純です:
file_exists($file)
チェックが失敗するのはなぜですか?
file_exists() がローカルファイルシステムのみをチェックするためであると(おそらく間違って)思いました。その場合、URL 経由で存在を確認する専用の機能はありますか? または将来の参照のための他のより良い解決策はありますか?
EDIT I(コメントリクエストによる)
Var_dump() はバイナリ文字列です:
string(51238) "����JFIF��������BZ�|su��{��3�_�R��[J��z���K�^��g�/��9���|*�F��W~�>tχ�>��� �&��?�~0�f�����[��i���R��_���g~�_��Ɵ�#����.5�x+�_ u��-�ٿ�L����ƺV�� ... ... ...
しかし、これは予測可能です。元の質問で言ったように、ファイルは正常に保存されています。なぜ file_exists() チェックが失敗するのかという問題であり、バイナリリモートファイルでそのチェックを実行するより良い方法があるかどうかです。 URL...