Кажется, что только чтение до 511 байтов данных из потока и копирование данных в выходной поток.
Поэтому, когда вам нужно записать все содержимое файла, вы должны повторять этот процесс до тех пор, пока больше не будет данных читать. В противном случае вы можете попытаться увеличить размер буфера перезаписи до необходимого размера.
/* usage:
1. When used as class method:
$GLOBALS['currfilesize'] = $this->savetofile($GLOBALS['dcc_stream'], $GLOBALS['handle'], $GLOBALS['currfilesize']);
Or
2. When used as regular function:
$currfilesize = savetofile($dcc_stream, $handle, $currfilesize);
*/
public function savetofile ($in, $out, $initSize) {
if ($in && $out) {
// init output size, set to zero when null
$size = $initSize ?: 0;
// reset input file pointer (when needed)
//rewind($in);
// gets up to 1024 bytes data from stream
// iterate all file contents (when needed)
//while ($dccgettemp = fgets($in, 1025)) {
if ($dccgettemp = fgets($in, 1025)) {
// increment output size by buffer size
$size += strlen($dccgettemp);
// write to output stream
fwrite($out, $dccgettemp);
// forces a write of all buffered output
// to the resource pointed to by the file handle.
fflush($out);
}
return $size;
}
return $initSize;
}
Вы также можете использовать stream_copy_to_stream () в качестве альтернативы.
Надеюсь, что это помогает.