fwrite () большое повреждение размера файла, мне нужна скрипт - PullRequest
0 голосов
/ 19 января 2020

У меня есть такой сценарий написания файла, но у меня проблемы с поврежденными файлами, может быть, кто-то может мне помочь?

function savetofile () {
    $dccgettemp = '';
    $dccgettemp = fgets($GLOBALS['dcc_stream'], 512);
    if ($dccgettemp != '') {
        $GLOBALS['dccget'] = $dccgettemp;
        $GLOBALS['currfilesize'] += strlen($dccgettemp);
        fwrite($GLOBALS['handle'], $dccgettemp);
    }
}

1 Ответ

0 голосов
/ 19 января 2020

Кажется, что только чтение до 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 () в качестве альтернативы.

Надеюсь, что это помогает.

...