【问题标题】:cURL CURLOPT_WRITEFUNCTION and tmpfile()cURL CURLOPT_WRITEFUNCTION 和 tmpfile()
【发布时间】:2013-06-25 22:07:38
【问题描述】:

此代码有效:

// Create temp file to write to
$fp_tmp = tmpfile();

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $name);
curl_setopt($ch, CURLOPT_FILE, $fp_tmp);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, 'https://dl.dropboxusercontent.com');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);

$result = curl_exec($ch);
curl_close($ch);

// Write the files
$fp = fopen($orderfile->getFileLocation(), 'w');
stream_copy_to_stream($fp_tmp, $fp);

这段代码没有:

// Create temp file to write to
$fp_tmp = tmpfile();

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $name);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, 'https://dl.dropboxusercontent.com');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $str) use (&$fp_tmp) {
    $length = fwrite($fp_tmp, $str);
    return $length;
});

$result = curl_exec($ch);
curl_close($ch);

// Write the files
$fp = fopen($orderfile->getFileLocation(), 'w');
stream_copy_to_stream($fp_tmp, $fp);

我假设我不能以这种方式通过“使用”将流传递给函数,因为它无法复制数据。我想我的问题是,如何使用 CURLOPT_WRITEFUNCTION 将 $str 的内容写入 $fp_tmp?

【问题讨论】:

    标签: php curl temporary-files


    【解决方案1】:

    我是个假人,我忘了使用 fseek() 重置指针。

    // Create temp file to write to
    $fp_tmp = tmpfile();
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $name);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, false);
    curl_setopt($ch, CURLOPT_REFERER, 'https://dl.dropboxusercontent.com');
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $str) use (&$fp_tmp) {
        $length = fwrite($fp_tmp, $str);
        return $length;
    });
    
    $result = curl_exec($ch);
    curl_close($ch);
    
    // Write the files
    $fp = fopen($orderfile->getFileLocation(), 'w');
    fseek($fp_tmp, 0);
    stream_copy_to_stream($fp_tmp, $fp);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多