PHP добавляет 2 дополнительных байта в мой загруженный файл - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть процесс, который загружает файлы через PHP, но в результате файлы получаются на 2 байта больше, чем исходный файл. Я не уверен, откуда берутся эти 2 байта. (фактический процесс - это частичная загрузка, где я нарезаю файл и загружаю фрагменты, каждый фрагмент получается на 2 байта длиннее, чем начался, но я проверил с одним небольшим файлом, и он тоже получает на 2 байта больше, чем источник).

Я прилагаю свой PHP ... Это нормальная функция PHP? Я представляю какой-то нулевой терминатор или что-то в этом роде (похоже, в конце каждого файла, которого изначально не было, есть \ n). Нужно ли мне читать файл в буфер и избавиться от последних двух байтов перед повторной сборкой моего оригинала? Я должен представить, что я делаю что-то не так, но я не уверен, что это будет.

Если мне нужно вручную удалить последние два байта, как правильно это сделать (это двоичный файл), а затем добавить остальное в общий файл, который я перестраиваю?


EDIT


Каждый загруженный файл получает слово 0D0A, добавленное в конец, так как PHP сохраняет его на сервере. Итак ... Я думаю, вопрос в том, как предотвратить это.

<?PHP
$target_path = $_REQUEST[ 'path' ];
$originalFileName = $_REQUEST['original_file_name'];
$target_path = $target_path . basename( $_FILES[ 'Filedata' ][ 'name' ] );

if ( move_uploaded_file( $_FILES[ 'Filedata' ][ 'tmp_name' ], $target_path ) )
{

        $newFilePath = $originalFileName; //this is the overall file being re-assembled
        $fh = fopen($newFilePath, 'ab') or die("can't open file");

        $nextSlice = file_get_contents($target_path); //this is the slice that's 2 bytes too big each time

        fputs($fh, $nextSlice);
        fclose($fh);

//      unlink($target_path); //normally I'd delete the slice at this point, but I'm hanging on to it while I figure out where the heck the 2 extra bytes are coming from.

        fclose($fh);

        echo "SUCCESS";

}
else
{
     echo "FAIL:There was an error uploading the file, please try again!";
}
?>

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Является ли файл двоичным?Я думаю, что file_get_contents вызывает проблемы, потому что он рассматривает это как строку.Может, тебе стоит попробовать fread ?

0 голосов
/ 05 февраля 2011

Решение оказывается таким:

fwrite ($ fh, $ GLOBALS ["HTTP_RAW_POST_DATA"]);

Возможно, я что-то не так делаю в своем запросе, что когда я использую метод, который я описал в вопросе, файл записывается с дополнительным 0D0A в конце, но в приведенном выше методе извлечения данных он поступает без изменений и точно правильная длина.

...