2012-07-28 28 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