我使用以下代码从web检索图像:
$get = wp_remote_get($image_file_name);
$mirror = wp_upload_bits(basename($image_file_name), \'\', wp_remote_retrieve_body($get));
此代码适用于所有类型的图像,除非图像没有扩展名。例如,如果图像文件名为:
http://www.some_site.com/image_filename.jpg
然后运行上面的代码就可以了。然而,链接
http://www.some_site.com/another_image_filename_but_without_extension
将出现以下错误:
Array
(
[error] => Invalid file type
)
经进一步调查,wp\\U upload\\U bits中似乎包含以下代码:
$wp_filetype = wp_check_filetype( $name );
if ( ! $wp_filetype[\'ext\'] && ! current_user_can( \'unfiltered_upload\' ) )
return array( \'error\' => __( \'Invalid file type\' ) );
它似乎正在检查扩展是否确实存在,如果不存在,则存在错误。
所以我的问题是,我如何解决这个问题来下载没有扩展的图像?
谢谢
最合适的回答,由SO网友:s_ha_dum 整理而成
我不知道无扩展名图像的URL来测试这一点,但我认为服务器必须通过content-type
标题。如果是这样的话,你应该能够$get[\'headers\'][\'content-type\']
, 找出它是什么类型的图像,并在其上添加适当的扩展名$image_file_name
发送到之前wp_upload_bits
.
您已检索到该信息。看看var_dump($get)
, 所以我们的想法是这样做:
$get = wp_remote_get($image_file_name);
$ending = file_ending_parsing_function($get[\'headers\'][\'content-type\']);
$mirror = wp_upload_bits(basename($image_file_name.$ending), \'\', wp_remote_retrieve_body($get));
wp_remote_retrieve_body
只需获取中已存在的信息
$get
, 检索人
wp_remote_get
, 因此,您不必下载一个不存在的文件,我运行了一个测试来确认
wp_upload_bits
只要扩展匹配,就可以选择任何内容。事实上,初步测试表明,它只需要有一个扩展。我可以上传
.jpg
并将其重命名为
.gif
扩展名,而无需操作文件。