팀 프로젝트에서 업로드 프로세스가 어떻게 진행되는지에 대한 간단한 설명.업로드 중간에 파일 업로드가 중단되었습니다.
클라이언트 측에서는 AJAX를 통해 응용 프로그램 서버에 업로드 서비스를 호출합니다. 그런 다음 응용 프로그램 서버는 Curl을 통해 파일 서버로 파일을 전달합니다 (파일 서버는 비공개이며 응용 프로그램 서버에서만 액세스 할 수 있습니다).
상황은 다음과 같습니다.
파일이 업로드 될 때 이미 응용 프로그램 서버를 통과하고 이미 파일 서버에 도달했습니다. 그러나 데이터가 클라이언트 측으로 다시 전달되기 전에 사용자가 클라이언트에서 취소 버튼을 클릭하십시오.
사용자가 요청을 중단 한 경우 응용 프로그램 서버에서 확인한 다음 파일 서버에 이미 삭제 된 파일이 있으면이 파일을 삭제하는 방법은 무엇입니까? 업로드가 취소 된 경우
내 솔루션
PHP는
ignore_user_abort=false
을 설정하는 경우에, 나는 확인할 수 없습니다. 그래서 저는 말리기 전에true
으로 설정했습니다.ini_set('ignore_user_abort', TRUE);
**
는, BTWignore_user_abort=false
은 여전히 스크립트 호출이 중단 즉시 후에도 컬 실행을 종료하지.통화가 중단 된 경우 진행률을 추적하도록
CURLOPT_NOPROGRESS
을 설정하십시오.curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'callback_progress');
핸들 진행
$cancelled = false; //cancel flag function callback_progress($download_size, $downloaded, $upload_size, $uploaded){ //Really need this, if not connection_aborted() never be true and curl still running even if script aborted print " "; ob_flush(); flush(); if(connection_aborted()!= 0){ if(!$cancelled) $cancelled = true; return 0; //to continue script, and handle later } }
- 은 작동하지 않을 것,
curl_close($ch); //close curl ini_set('ignore_user_abort', FALSE); //set back to false //If $cancelled if true, make delete call to file server using the file id if($cancelled && isset($response['id'])) return $this->removeFile($response['id']);
를 진행하지만. $cancelled
은 여전히 거짓이지만 아직 callback_progress
기능에서는 true입니다.
더 좋은 방법이 있나요? 이 상황에서는 어디서나 올바른 솔루션을 찾을 수 없습니다.