PHP,如果file_exists()语句在URL上的file_get_content()上失败

时间:2013-03-08 02:15:39

标签: php if-statement file-get-contents file-exists

我有一个非常简单的功能来读取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()会返回一个无效的网址,因此会保存一个空图像,因此我使用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()只检查LOCAL文件系统。如果是这种情况,那么是否有专门的功能来检查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()检查失败的问题,以及是否有更好的方法来执行对二进制文件的检查来自URL的远程文件...

2 个答案:

答案 0 :(得分:2)

$file = file_get_contents($url)表示$file包含一个字符串,即文件的内容。除非文件的内容恰好是存在的文件的路径,否则您将不会保存任何内容。

您想要检查if( file_exists($url))并保留之前的单行。

答案 1 :(得分:1)

file_exists()需要一条路径,例如/home/user/foo.txtC:\foo.txt。您正在向它提供文件的内容,而不是文件的本地路径,因此它不会返回真值(当然,除非文件的内容是现有文件的有效文件路径...不要混淆水域,但必须要说:))。