-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 语句进行了简单的检查并分隔了一个衬里:

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 是否存在?或任何其他更好的解决方案供将来参考?

编辑我(根据评论请求)

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() 检查失败的问题,以及是否有更好的方法来对二进制远程文件执行检查网址...

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.txtC:\foo.txt。您正在向它提供文件的内容,而不是文件的本地路径,因此它不会返回真值(当然,除非文件的内容是现有文件的有效文件路径......不要把水弄混,但必须说:))。

于 2013-03-08T03:10:46.380 回答