2011-05-05 3 views
7

plupload를 사용하여 서버에 여러 파일을 업로드하고 있습니다. 이것을 사용하면 'url :'upload.php '매개 변수가 있습니다. upload.php는 파일을 수신 할 때 잡아서 청크가 발생하면 다시 결합 할 수 있습니다. 전체 파일을 받으면 원본 페이지에 응답을 보내고 녹색 확인란을 표시합니다.php rename()이 내 파일을 손상시키는 이유는 무엇입니까?

내가 업로드 한 사진을 조작하는 데 필요한 모든 코드를이 페이지에 추가했습니다. 내 풀 사이즈 이미지 인 lg, med 및 small의 사본 3 개를 만드는 것이 나의 계획입니다. 이 부분이 작동하도록 설정했으나 원래 이름 지정 스키마와 일치하도록 원래 파일의 이름을 바꾸기로 결정했습니다.

이제 이름이 변경된 파일이 손상되어 3 개의 작은 이미지도 손상됩니다.

//get the original file info 
$filepath = $_SERVER['DOCUMENT_ROOT'].'/uploads/'; 
$filepathinfo = pathinfo($filepath.$fileName);//fileName is used previously in the file 

//rename original file to a unique name 
$finding_id = 'xyz'; 
$file_name_new = uniqid($client_id . '-' . $finding_id . '-', true); //doesn't include extension 
//rename($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 
//copy($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 

은 그대로, 내 하나 개의 파일을 얻을, 또는 내가 업로드하는 방법을 지금까지 많은 바이트 크기는 원래 정확히 일치하고, 이름 (특정 문자를 제거 제외) 동일하게 유지됩니다.

이름 바꾸기 기능 만 주석 처리를 제거하면 실제로 두 개의 파일이 생깁니다. 바이트 크기가 원본 사진의 합계입니다. 큰 파일은 하단에 회색 섹션으로 표시됩니다. 더 작은 파일은 전혀 표시되지 않습니다.

복사 기능 만 주석 처리를 취소하면 원본 파일과 원본 파일 및 다른 파일의 이름이 바뀐 파일의 크기와 손상이 동일한 이름으로 복사됩니다.

아이디어가 있으십니까? 꽤 직설적이어야하는 것처럼 보입니다.

+1

파일을 업로드 한 프로세스가 완료 되었습니까? 파일 설명자가 닫혔습니까? 모든 버퍼가 플러시 되었습니까? – Konerak

+0

이 해결책에 따르면 : http://stackoverflow.com/questions/3159431/php-change-file-extension, 해결 방법은 사본을 사용하는 것입니다. 아직도, 그렇게해서는 안됩니다. – Horus

+0

@Horus - 복사를 시도했지만 이상한 결과를 얻었습니다. 이 Pluploader에는 이전에 사용 해본 적이없는 무언가가 있어야합니다. – Bob

답변

2

나는 내가 있었다 잊었다 청킹 기능이 켜져 있습니다. 뭔가를 테스트하기 위해 그것을 켜야합니다. 어떤 이유로 든 스크립트가 실행될 때 파일의 마지막 덩어리가 완전히 추가되지 않았습니다. 어쨌든 모든 입력에 감사드립니다!

0

직접 파일에 편지를 쓰고 있습니까? 그렇다면 fflush 또는 fclose에 대한 전화가 누락 된 것일 수 있습니다. (PHP가 쓰여질 때 파일의 마지막 덩어리가 작성되지 않고 파일이 더 이상 존재하지 않는다. 리눅스 나 다른 유닉스를 사용한다면 이런 일이 일어나지 않을 것이지만, 나는 윈도우에서 그걸 상상할 수있다.)

+0

아니, 내 자신의 파일에 쓰지 말아라. 그냥 plupload가 처리하도록하십시오. 내가 아는 한 파일은 fclose를 적절히 사용하고있다. – Bob

4
  1. 파일이 현재 곳이 요청하면하면 fopen()가 같은 파일이 FCLOSE 호출해야 할 경우 move_uploaded_file
  2. 사용 HTTP POST에 의해 업로드 된 경우()
관련 문제