2013-06-25 44 views
0

此代碼:捲曲CURLOPT_WRITEFUNCTION和TMPFILE()

// 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?

回答

3

我是個假人,我忘了用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);