2009-07-24 76 views
2

嘿。此代碼適用於大多數瀏覽器,甚至部分適用於IE6。它上傳的文件少於10Mb(大約),但沒有更大的文件。該代碼指定允許這些文件。上傳IE6中大於10Mb的文件問題

另外,請注意,似乎整個文件似乎被忽略之前轉移到服務器。

該網站是在:www.mgxvideo.com/mgxcopy-alpha-3/,可以通過添加購物車中的項目,然後單擊上傳功能。想法?

這裏是以下形式:

<form enctype="multipart/form-data" action="upload_files.php?order_id=<?php echo $_GET['order_id'] ?>" method="POST"> 
    <table style="width:100%"> 
     <tr> 
      <td valign="top"> 
       <span class="style1">Choose a file to upload: </span> 
      </td> 
      <td valign="top"> 
       <input name="uploadedfile" type="file" /> 
      </td> 
     </tr> 
    </table> 
    <input type="submit" value="Upload File" /> 
    <input type="hidden" name="action" value="add"/> 
    <input type="hidden" name="MAX_FILE_SIZE" value="100000000" /> 
</form> 

這裏是在upload_files.php的頂部一行:

$upload_output = upload_file($customer_id, $_REQUEST['action'], $_GET['order_id'], $_FILES); 

這裏是upload_file()的代碼:

function upload_file($customer_id, $action, $upload_id, $FILES) 
{ 
    $target_path = "uploads/"; 

    $target_path = $target_path . $customer_id . '_' . $upload_id . '_' . basename($FILES['uploadedfile']['name']); 
    $str_output = ''; 

    if ($action == 'del' and file_exists($_POST['filepath'])) 
    { 
     delete_file($customer_id, $_POST['filepath']); 
     $str_output = '<span class="style1">File successfully deleted. If you are done uploading files, ' . 
       '<a href="#" onclick="self.close();">click here</a> to close this window.</span>'; 
     setcookie("upload_out_txt", $str_output, time() + 300); 
     setcookie("upload_out_b", "1", time() + 300); 
    } else if ($action == 'add') 
    { 
     if (count_uploads($customer_id, $upload_id) >= 2) 
     { 
      $str_output = '<span class="style1">Problem: You have reached the maximum allowed uploads for this particular order. Please delete a file before continuing.</span>'; 
      setcookie("upload_out_txt", $str_output, time() + 300); 
      setcookie("upload_out_b", "1", time() + 300); 
     } else if (file_exists($target_path)) 
     { 
      $str_output = '<span class="style1">Problem: A version of the file you are trying to upload already exists. Please delete the file from out servers before uploading again.</span>'; 
      setcookie("upload_out_txt", $str_output, time() + 300); 
      setcookie("upload_out_b", "1", time() + 300); 
     } else if (move_uploaded_file($FILES['uploadedfile']['tmp_name'], $target_path)) 
     { 
      insert_to_database('uploaded_files', array($customer_id, $upload_id, 'now()', $target_path)); 
      $str_output = '<span class="style1">Success. The file was successfully uploaded. If you are done, <a href="" onclick="window.close();">click here to close the window</a></span>'; 
      setcookie("upload_out_txt", $str_output, time() + 300); 
      setcookie("upload_out_b", "1", time() + 300); 
     } else 
     { 
      $str_output = '<span class="style1">There was an error uploading the file, please try again!</span>'; 
      setcookie("upload_out_txt", $str_output, time() + 300); 
      setcookie("upload_out_b", "1", time() + 300); 
     } 
    } 



    return $str_output; 
} 

這是我的php.ini文件,在我嘗試實施修復後:

extension_dir="/kunden/homepages/30/d93769495/htdocs/extensions"; 
extension=uploadprogress.so; 
upload_max_filesize=150M; 
post_max_size=210M; 
max_input_time=1800; 
file_uploads=1; 
memory_limit=240M; 
max_execution_time=1800; 

回答

2

這可能無法解決它,但在一個線程上我正在讀它說IE6需要處理文件名輸入前的MAX_FILE_SIZE行。因此,嘗試了以下各行到窗體的頂部:

<input type="hidden" name="MAX_FILE_SIZE" value="100000000" /> 

我不知道,如果它的工作原理和IE6需要它的順序進行分析,而這正是線程我讀說解決方案是。

還檢查您的php.ini文件大小和超時。

+0

改變,但無濟於事 – montooner 2009-07-25 04:55:42

+0

的`MAX_FILE_SIZE`已在客戶端上絕對沒有任何影響。事實上,你可以刪除它。 – 2009-07-25 04:57:23

3

入住php.ini以下設置:

  1. upload_max_filesize需要大於10 MIB(10M)。

  2. post_max_size需要比upload_max_filesize大至少40%。

    這需要的原因是一些舊的用戶代理將使用base64編碼進行上傳,這會增加37%的數據開銷。添加MIME頭文件,其他帖子參數,有很多理由讓它高於upload_max_filesize

  3. max_input_time需要是至少900(15分鐘)。

    您希望爲用戶提供足夠的時間來上傳文件。