我有一个非常简单的功能来读取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的远程文件...
答案 0 :(得分:2)
$file = file_get_contents($url)
表示$file
包含一个字符串,即文件的内容。除非文件的内容恰好是存在的文件的路径,否则您将不会保存任何内容。
您想要检查if( file_exists($url))
并保留之前的单行。
答案 1 :(得分:1)
file_exists()
需要一条路径,例如/home/user/foo.txt
或C:\foo.txt
。您正在向它提供文件的内容,而不是文件的本地路径,因此它不会返回真值(当然,除非文件的内容是现有文件的有效文件路径...不要混淆水域,但必须要说:))。