-1

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...

4

2 に答える 2

2

$file = file_get_contents($url)$fileファイルの内容である文字列を含むことを意味します。ファイルの内容がたまたま存在するファイルへのパスでない限り、何も保存しません。

if( file_exists($url))以前のワンライナーを確認して保持したい。

于 2013-03-08T02:19:33.713 に答える
1

file_exists()/home/user/foo.txt、またはのようなパスが必要C:\foo.txtです。ファイルへのローカルパスではなく、ファイルの内容を提供しているため、真の値は返されません (もちろん、ファイルの内容が既存のファイルへの有効なファイルパスでない限り...水を濁らせないようにしますが、言わなければなりませんでした:))。

于 2013-03-08T03:10:46.380 に答える