如何使用WordPress HTTP API远程下载文件

时间:2012-11-08 作者:Scott

所以这段PHP代码对我很有用:

    $ch = curl_init( TCS_CPDF_REMOTE_ZIP );
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    $data = curl_exec( $ch );
    curl_close( $ch );
    file_put_contents( TCS_CPDF_LOCAL_ZIP, $data );
但在尝试使用WordPress HTTP API时:

    $the_body = wp_remote_retrieve_body( wp_remote_get( TCS_CPDF_REMOTE_ZIP ) );

    file_put_contents( TCS_CPDF_LOCAL_ZIP, $the_body );
我最终得到了一个0KB的文件,所以上面的WordPress版本不起作用。

那么,如何使用WordPress API从远程位置下载文件呢?

3 个回复
最合适的回答,由SO网友:TheDeadMedic 整理而成

退房download_url() - 它只加载在admin中,因此如果需要,您必须在前端包含它(或编写自己的)。

从…起download_url() 您可以使用:

$response = wp_remote_get( 
    TCS_CPDF_REMOTE_ZIP, 
    array( 
        \'timeout\'  => 300, 
        \'stream\'   => true, 
        \'filename\' => TCS_CPDF_LOCAL_ZIP 
    ) 
);

SO网友:Brian C

如果您在WordPress Admin中,则具有以下功能download_url() 可用(see codex description).

download_url() 下载该文件,使其在临时文件中可用,并返回要复制/重命名然后取消链接的文件的名称。看见download_url() 来源于此处wp-admin/includes/file.php for more details.

上面提到download\\u url()的回答似乎有一个wp\\u remote\\u get()示例-download\\u url()的示例如下:

$permfile = \'safefilename.jpg\';
$tmpfile = download_url( $url, $timeout = 300 );
copy( $tmpfile, $permfile );
unlink( $tmpfile ); // must unlink afterwards
显然这很好。当然,如果$permfile是基于外部提供的文件名,那么您需要确保它被很好地清理干净。

SO网友:mujuonly

$your_pdf_path = \'https://example.com/Fortrydelsesformular.pdf\';

if (!class_exists(\'WP_Http\'))
    include_once( ABSPATH . WPINC . \'/class-http.php\' );
$http = new WP_Http();
$response = $http->request($your_pdf_path);
if ($response[\'response\'][\'code\'] != 200) {
    return false;
}
$upload = wp_upload_bits(basename($your_pdf_path), null, $response[\'body\']);
if (!empty($upload[\'error\'])) {
    return false;
}
$file_path = $upload[\'file\'];
如果您打印出$upload , 你会在下面

Array
(
    [file] => /var/www/aug15/wp-content/uploads/2019/02/Fortrydelsesformular.pdf
    [url] => https://myadomain.com/Fortrydelsesformular.pdf
    [type] => application/pdf
    [error] => 
)

结束

相关推荐

How deactivate the http-api

为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复