我有一个非常简单的功能来读取 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() 检查失败的问题,以及是否有更好的方法来对二进制远程文件执行检查网址...