PHP를 통해 파일을 업로드하는 프로세스가 있지만 결과 파일의 크기가 소스 파일보다 2 바이트 크게됩니다. 이 2 바이트가 어디서 오는지는 잘 모르겠습니다. (실제 프로세스는 파일을 슬라이스하고 슬라이스를 업로드하는 청크 업로드입니다. 각 슬라이스는 시작된 것보다 2 바이트 길어 지지만, 하나의 작은 파일로 테스트 한 결과 2 바이트가 더 커졌습니다. 출처).업로드 된 파일에 2 바이트를 추가하는 PHP
내 PHP를 첨부하고 있습니다 ... 이것은 PHP의 일반적인 기능입니까? 나는 어떤 종류의 널 터미네이터 (terminator) 또는 뭔가를 상상하고있다. (처음에는 거기에 없었던 각 파일의 끝에 \ n이있는 것처럼 보인다.) 원래 파일을 다시 어셈블하기 전에 파일을 버퍼로 읽고 마지막 두 바이트를 제거해야합니까? 나는 내가 뭔가 잘못하고 있다고 상상해야하지만, 나는 그것이 무엇이 될 것인지 혼란 스럽다.
마지막 두 바이트를 수동으로 제거해야하는 이유는 무엇이 올바른지 (바이너리 파일인지) 나머지를 내가 다시 작성하는 전체 파일에 추가하는 것입니까?
편집
PHP가 서버에 저장 각 업로드 된 파일이 마지막에 추가 0D0A 단어를 얻고있다. 그래서 ... 나는 이것이 일어나는 것을 방지하는 방법이 문제라고 생각합니다.
<?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!";
}
?>
소리가 BOM (Byte Order Mark)과 비슷합니다. 파일의 인코딩은 무엇입니까? – profitphp
'fputs'를'fwrite'로 바꾸면 문제가 사라 집니까? (나는 그것들이 동의어가 될 것이라고 생각하지만 적어도'fputs'에서는 출력에 개행을 추가하므로 PHP 함수에 개행을 추가하는 버그가있을 수 있습니다 ...) –
'fputs ($ fh, $ nextSlice, count ($ nextSlice) - 2)'? –