2010-06-25 6 views
2

PHP/apache로 대용량 파일 (500MB 이상)을 업로드하는 서비스가 있습니다. 업로드 진행률은 uploadprogress pecl 확장자로 추적됩니다. 이 구성표는 작은 파일 업로드에만 적합합니다.PHP로 대용량 파일을 업로드 한 후`No such file` 오류가 발생했습니다

그러나 대용량 파일을 업로드 할 때 문제가 있습니다. 업로드가 끝나면 오류가 없음을 나타내는 $ _FILES 배열에 표준 정보가 있습니다. 문제는이 시점까지는/tmp/phpXXXX 파일 자체가 존재하지 않는다는 것입니다.

업로드 도중 수동으로 tmp 파일을 제거하면 업로드 프로세스가 중지되지 않고 업로드가 완료된 후에 만 ​​오류가 발생 함을 테스트했습니다.

호스팅 제공 업체는 tmp 파일을 제거하는 유지 관리 스크립트가 없다고 말합니다. 또한 그것은 그러한 tmp 파일들이 업로드가 끝날 때까지 파일 시스템에서 거의 사용 가능하다고 말하면 사라집니다.

아파치/서버/PHP 구성으로 인해 발생할 수 있습니까? OS에서 이러한 tmp 파일에 영향을 줄 수있는 것이 있습니까?

OS는 우분투 8입니다. LTS

아무 도움이됩니다.

답변

1

밖으로 : 나는 그것을 알고있는 것처럼 파일 크기가 PHP post_max_size 또는 일부 아파치 제한 (Arkh이 LimitRequestBody 언급)

사이드 참고 넘어 경우

UPLOAD_ERR_NO_FILE도 반환 할 수있다 업로드 된 파일이 작동하지 않는 데는 여러 가지 이유가 있습니다.

  • 파일이 너무 오래에는 이름/파일 이름 (값이 없습니다 : -

    • 이 upload_max_filesize
    • post_max_size을은이 upload_max_filesize보다
     
        $POST_MAX_SIZE = ini_get('post_max_size'); 
        $unit = strtoupper(substr($POST_MAX_SIZE, -1)); 
        $multiplier = ($unit == 'M' ? 1048576 
         : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1))); 
    
        if (isset($_SERVER['CONTENT_LENGTH'])) { 
         if ((int) $_SERVER['CONTENT_LENGTH'] > $multiplier * (int) 
          $POST_MAX_SIZE && $POST_MAX_SIZE) { 
          $error = 'POST exceeded maximum allowed size.'; 
         } 
        } 
    
    • $_FILES['myfile']['error']> 0 (http://php.net/manual/en/features.file-upload.errors.php은 참조) 크게 필요 $_FILES['myfile']['name'])
    • Tr 멀티 파트 기능 (E.)을 사용하여 비 멀티 파트 업로드를 읽으십시오.거짓 G move_uploaded_file/is_uploaded_file 반환)
    • upload_tmp_dir을 쓸 수 없습니다 (이이 보통 UPLOAD_ERR_CANT_WRITE 오류를 제공하지만, 목적지 (전체 !is_writable($targetDir)
    • 디스크를 쓰기 가능하지
    • 리눅스에서 기본적으로/tmp를))
  • 0

    서버 LimitRequestBody 매개 변수를 확인 했습니까? 업로드하려는 파일이 충분히 높지 않을 수 있습니다.

    +0

    감사하다, 하지만 0으로 설정되어 있습니다 –

    0

    php upload_max_filesize 및 post_max_size 설정을 확인 했습니까? (php.ini 파일에서)

    +0

    예, 둘 다 약 2GB입니다 –

    0

    업로드가 완료되면이 오류가 없는지 보여주는 $ _FILES 배열의 표준 정보 있다.

    error 요소를 확인했다고 가정합니다. UPLOAD_ERR_INI_SIZE과 같이 upload error constants 중 하나에 해당하는 정수입니다. 우분투 10.04 LTS가 지금

    +0

    고마워요. 각 업로드 된 파일에 대해 오류 요소는 0입니다. 또한 오늘 테스트를 마치면 업로드 된/tmp/phpXXXX 파일이 스크립트 시작 부분에 여전히 존재하지만 이상한 방식으로 사라지는 것처럼 보입니다 –

    관련 문제