2010-06-25 15 views
2

有一種服務用php/apache上傳大文件(大於500MB)。上傳進度通過uploadprogress pecl擴展進行跟蹤。 此方案僅適用於小文件上傳。用php上傳大文件後沒有這樣的文件錯誤

但是,上傳大文件時出現問題。上傳完成後,$ _FILES數組中的標準信息顯示沒有錯誤。問題是這次/ tmp/phpXXXX文件本身不存在。

我測試過,如果我們在上傳過程中手動刪除tmp文件,上傳過程不會停止,只有上傳完成後纔會引發錯誤。

主機提供商說,沒有維護腳本正在刪除tmp文件。另外它說,這樣的tmp文件幾乎直到上傳結束纔在文件系統中可用,然後消失。

難道是由apache/server/php配置引起的嗎?操作系統中是否有可能影響這些tmp文件的內容?

OS是Ubuntu的LTS 8

任何幫助,將不勝感激!

回答

1

有:

據我瞭解,UPLOAD_ERR_NO_FILE也可以,如果文件大小越過PHP post_max_size或某些Apache的限制(Arkh提到LimitRequestBody

旁註返回是上傳文件無法正常工作的一系列原因。

  • 的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 ying使用多部分功能來閱讀非分段上傳(E.摹move_uploaded_file/is_uploaded_file返回false)
  • upload_tmp_dir不可寫(這是默認的Linux的/ tmp)
  • 目標不可寫!is_writable($targetDir)
  • 磁盤已滿(雖然這通常給UPLOAD_ERR_CANT_WRITE錯誤)
0

你檢查了你的服務器LimitRequestBody參數嗎?對於您要上傳的文件來說可能不夠高。

+0

謝謝,但它設置爲0 – 2010-06-28 15:46:50

0

您是否驗證過您的php upload_max_filesize和post_max_size設置? (在php.ini文件)

+0

是的,它們都是大約2GB – 2010-06-28 15:47:12

0

一旦上傳完成後,有 的$ _FILES 數組中顯示沒有錯誤標準的信息。

我假設你檢查了error元素?它是一個整數,對應於upload error constants之一,例如UPLOAD_ERR_INI_SIZE。 Ubuntu的10.04什麼了!

+0

謝謝。對於每個上傳的文件,錯誤元素爲0. 另外,在今天的測試之後,看起來上傳的/ tmp/phpXXXX文件仍然存在於腳本的開頭,但隨後以奇怪的方式消失 – 2010-06-28 15:56:36

相關問題