У меня есть процесс, который загружает файлы через 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!";
}
?>