가장 안전한 방법 중 하나는 임시 이름으로 파일을 업로드 한 다음 전송이 완료되었습니다. 프로그램에서는 임시 이름을 가진 파일을 건너 뛰어야합니다 (간단한 확장은 정상적으로 작동합니다.) 분명히 클라이언트 (업 로더)가 협력해야하기 때문에 이상적이지 않습니다.
은 파일 크기가 정확성과 안전하지 않은 폴링 기반으로
아무것도 [이것은 또한 당신이 필요하면 당신은 주어진 시간 기간 이후에 실패 (부분) 전송을 삭제합니다. 수 있습니다].
다른 구성표 (업 로더도 협력해야 함)는 파일의 해시와 크기를 먼저 업로드 한 다음 실제 파일을 업로드하는 과정을 수반 할 수 있습니다. 이를 통해 전송이 완료되면 일관성이 있는지 여부를 알 수 있습니다. (이 아이디어를 둘러싼 변형이 많이 있습니다.)
클라이언트와 협력 할 필요가없는 것은 파일이 다른 프로세스에서 열려 있는지 여부를 확인하는 것입니다. (당신이하는 일은 OS 의존적입니다 - 이것을 수행하는 PHP 내장 함수를 모른다. lsof
및/또는 fuser
은 다양한 Unix 유형 플랫폼에서 사용할 수 있지만 Windows에는 이에 대한 API가 있습니다.) 다른 프로세스에 파일이 열리면 아직 완료되지 않은 가능성이 있습니다.
업로드를 다시 시작/다시 시작하도록 허용하거나 FTP 서버 소프트웨어가 YMMV와 같이 전체 전송 기간 동안 파일을 열어 두지 않으면이 마지막 접근 방법은 바보가 될 수 없습니다.
출처
2011-08-30 10:51:48
Mat
흠, 흥미로운 질문 참으로 filemtime로 할 수있는 같은! +1 –
[ftp_nb_put] (http://nl3.php.net/manual/en/function.ftp-nb-put.php)을 사용할 수 있습니다 (문서에 while 루프가있는 예 참조). –
리눅스에서 exec를 사용하여 'lsof | grep filename ' –