2012-07-28 62 views
1

我有一個本地安裝(PHP4/MySQL)設計的應用程序,它的工作原理非常完美。因爲我把它移動到一個實時安裝(PHP5/MySQL),我什麼都沒有,但問題!我修正了所有全局變量問題(導致我學習PDO,所以不是一件壞事!),而不用開啓全局變量,所以我唯一的問題就是文件上傳。我試過$ _file的isset測試,它看起來像變量從未設置?有任何想法嗎?文件上傳在PHP4上,但不是PHP5

這裏是表單數據:

 <form enctype="multipart/form-data" method="post" action="script_add_product.php" > 

    <input class="cp_forms_upload" type="file" name="full_image" /> 

    <input class="cp_formsButton" type="submit" name="submit_button" value="Add Product" /></form> 

這裏是PHP:

$full_image_url = $_FILES["full_image"]["name"];  

    if ((($_FILES["full_image"]["type"] == "image/gif") 
    || ($_FILES["full_image"]["type"] == "image/jpeg") 
    || ($_FILES["full_image"]["type"] == "image/pjpeg") 
    || ($_FILES["full_image"]["type"] == "image/png")) 
    && ($_FILES["full_image"]["size"] < 400000)) 
     { 
    if ($_FILES["full_image"]["error"] > 0) 
     { 
     echo "Return Code: " . $_FILES["full_image"]["error"] . "<br />"; 
     } 
    else 
     { 
     echo "Upload: " . $_FILES["full_image"]["name"] . "<br />"; 
     echo "Type: " . $_FILES["full_image"]["type"] . "<br />"; 
     echo "Size: " . ($_FILES["full_image"]["size"]/1024) . " Kb<br />"; 
     echo "Temp file: " . $_FILES["full_image"]["tmp_name"] . "<br />"; 

     if (file_exists("../Uploads/" . $_FILES["full_image"]["name"])) 
     { 
     echo $_FILES["full_image"]["name"] . " already exists. "; 
     } 
     else 
     { 
     move_uploaded_file($_FILES["full_image"]["tmp_name"], 
     "../Uploads/" . $_FILES["full_image"]["name"]); 
     echo "Stored in: " . "../Uploads/" . $_FILES["full_image"]["name"]; 
    echo "<br /><br /><br />" . $full_image_url; 
     } 
     } 

     } 

     else 
     { 
    echo "Invalid file"; 
     } 

感謝鄉親:)

+1

是什麼$ _ POST輸出的var_dump($ _ POST); – Bono 2012-07-28 19:55:10

+0

你確定你想上傳圖片不大於upload_max_filesize值越大 – mrok 2012-07-28 20:01:35

+0

mrok,我?已經測試了大小隻有20kb的圖片Upload_max_filesize是16M Bono,我怎麼var_dump? – 2012-07-28 21:10:57

回答

0

你能在你的php.ini檢查是否file_uploads設爲On

; Whether to allow HTTP file uploads. 
; http://ph .net/file-uplollow HTTP file uploads. 
; http://php.net/file-uploads 
file_uploads = On 
+0

嗨,phpinfo()告訴我file_uploads在? – 2012-07-28 21:09:28

0

請參閱php.ini config。

;;;;;;;;;;;;;;;; 
; File Uploads ; 
;;;;;;;;;;;;;;;; 

; Whether to allow HTTP file uploads. 
; http://php.net/file-uploads 
file_uploads = On 

; Temporary directory for HTTP uploaded files (will use system default if not 
; specified). 
; http://php.net/upload-tmp-dir 
upload_tmp_dir = "...../tmp" 

; Maximum allowed size for uploaded files. 
; http://php.net/upload-max-filesize 
upload_max_filesize = 128M 

此外,它可能是有用的,php.inimemory_limitmax_execution_time配置PARAMS。 更多:Handling file Uploads -> Common Pitfalls

確保文件夾"../Uploads/"存在並且有寫入權限下阿帕奇/ nginx的工作(www_data或部分等)

+0

嗨,這是結果m phpinfo()如果這有幫助? 的upload_max_filesize \t 16M \t 16M upload_tmp_dir \t沒有價值\t沒有價值 – 2012-07-28 21:08:30

+0

我測試你的代碼。它的工作原理!所以我認爲它不是permitions或沒有這樣的文件夾。如果可能的話,它將有助於查看日誌。 如果你不能查看日誌,只需在每一步中插入'var_dump(...);'。或'echo'xbcvxcvx'; die;'查看錯誤的位置 – alek13 2012-07-29 00:42:48

+0

您還可以設置自己的error_handler(如果尚未使用的話)將錯誤記錄到某個文件... - 以備將來使用。 [set_error_handler](http://php.net/manual/en/function.set-error-handler.php) – alek13 2012-07-29 00:49:56

-1

難道這是問題的用戶?另外一個「(」支架在本節:

if (($_FILES["full_image"]["type"] == "image/gif") 
    || ($_FILES["full_image"]["type"] == "image/jpeg") 
    || ($_FILES["full_image"]["type"] == "image/pjpeg") 
    || ($_FILES["full_image"]["type"] == "image/png")) 
    && ($_FILES["full_image"]["size"] < 400000)) 
+0

括號匹配。 – Sarke 2012-07-29 00:47:41

+0

@Sarke我在我的答案中糾正了它。我指的是發佈的一個OP。檢查他提供的代碼 – asprin 2012-07-29 08:12:37

+0

@asprin我使用這裏的代碼http://www.w3schools.com/php/php_file_upload.asp,具有諷刺意味的是,當我通過一個PHP IDE放置代碼時,它告訴我這個行有問題: // && in_array($ extension,$ allowedExts)) 當它檢查擴展時。所以我評論它,但沒有與最終結果不相容。 – 2012-07-29 10:18:05