web-dev-qa-db-ja.com

WordPress HTTP APIを使用して遠隔地からファイルをダウンロードする方法

それで、この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を使用して遠隔地からファイルをどのようにダウンロードするのでしょうか。

5
Brady

download_url() - これは管理者にのみ読み込まれるので、フロントエンドで必要ならばそれを含める(あるいは自分で書く)必要があります。

download_url()からあなたは使用することができます:

$response = wp_remote_get( 
    TCS_CPDF_REMOTE_Zip, 
    array( 
        'timeout'  => 300, 
        'stream'   => true, 
        'filename' => TCS_CPDF_LOCAL_Zip 
    ) 
);
7
TheDeadMedic

WordPress管理者の場合は、download_url()関数が利用可能です( コーデックスの説明を参照 )。

download_url()はファイルをダウンロードし、それを一時ファイルで利用できるようにして、あなたがコピー/リネームしてからリンク解除したファイルの名前を返します。詳細は wp-admin/includes/file.phpにあるdownload_url() sourceを参照してください

Download_url()に言及している上記の回答は、wp_remote_get()の例を持っているように見えます - download_url()の例は以下の通りです。

$permfile = 'safefilename.jpg';
$tmpfile = download_url( $url, $timeout = 300 );
copy( $tmpfile, $permfile );
unlink( $tmpfile ); // must unlink afterwards

明らかにこれはとてもいいです。もちろん、$ permfileが外部から提供されたファイル名に基づいているなら、きちんとサニタイズされることを望むでしょう。

1
Brian C
$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] => 
)
1
mujuonly