Lin*_*een 15
您需要一个临时文件,您可以在其中放置源文件的位以及要附加的内容:
$sp = fopen('source', 'r');
$op = fopen('tempfile', 'w');
while (!feof($sp)) {
$buffer = fread($sp, 512); // use a buffer of 512 bytes
fwrite($op, $buffer);
}
// append new data
fwrite($op, $new_data);
// close handles
fclose($op);
fclose($sp);
// make temporary file the new source
rename('tempfile', 'source');
Run Code Online (Sandbox Code Playgroud)
这样,整个内容source都不会被读入内存.使用cURL时,可能会省略设置CURLOPT_RETURNTRANSFER,而是添加一个写入临时文件的输出缓冲区:
function write_temp($buffer) {
global $handle;
fwrite($handle, $buffer);
return ''; // return EMPTY string, so nothing's internally buffered
}
$handle = fopen('tempfile', 'w');
ob_start('write_temp');
$curl_handle = curl_init('http://example.com/');
curl_setopt($curl_handle, CURLOPT_BUFFERSIZE, 512);
curl_exec($curl_handle);
ob_end_clean();
fclose($handle);
Run Code Online (Sandbox Code Playgroud)
好像我总是想念显而易见的事情.正如Marc所指出的那样,CURLOPT_FILE直接将响应写入磁盘.