PHPfile upload部分上传错误

我被困在一个关于file upload的问题上。 我试图将JPG,JPEG或PNG图像上传到文件夹。 我正在读一本书,并按照他们的例子,我的代码现在是这样的:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""> <html xmlns="" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Upload an Image</title> <style type="text/css" title="text/css" media="all"> .error { font-weight: bold; color: #C00; } </style> </head> <body> <?php # Script 11.2 - upload_image.php // Check if the form has been submitted: if ($_SERVER['REQUEST_METHOD'] == 'POST') { // Check for an uploaded file: if (isset($_FILES['upload'])) { // Validate the type. Should be JPEG or PNG. $allowed = array ('image/pjpeg', 'image/jpeg', 'image/JPG', 'image/X-PNG', 'image/PNG', 'image/png', 'image/x-png'); if (in_array($_FILES['upload']['type'], $allowed)) { // Move the file over. if (move_uploaded_file ($_FILES['upload']['tmp_name'], "upload/{$_FILES['upload']['name']}")) { echo '<p><em>The file has been uploaded!</em></p>'; } // End of move... IF. } else { // Invalid type. echo '<p class="error">Please upload a JPEG or PNG image.</p>'; } } // End of isset($_FILES['upload']) IF. // Check for an error: if ($_FILES['upload']['error'] > 0) { echo '<p class="error">The file could not be uploaded because: <strong>'; // Print a message based upon the error. switch ($_FILES['upload']['error']) { case 1: print 'The file exceeds the upload_max_filesize setting in php.ini.'; break; case 2: print 'The file exceeds the MAX_FILE_SIZE setting in the HTML form.'; break; case 3: print 'The file was only partially uploaded.'; break; case 4: print 'No file was uploaded.'; break; case 6: print 'No temporary folder was available.'; break; case 7: print 'Unable to write to the disk.'; break; case 8: print 'File upload stopped.'; break; default: print 'A system error occurred.'; break; } // End of switch. print '</strong></p>'; } // End of error IF. // Delete the file if it still exists: if (file_exists ($_FILES['upload']['tmp_name']) && is_file($_FILES['upload']['tmp_name']) ) { unlink ($_FILES['upload']['tmp_name']); } } // End of the submitted conditional. ?> <form enctype="multipart/form-data" action="upload_image.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="524288" /> <fieldset><legend>Select a JPEG or PNG image of 512KB or smaller to be uploaded:</legend> <p><b>File:</b> <input type="file" name="upload" /></p> </fieldset> <div align="center"><input type="submit" name="submit" value="Submit" /></div> </form> </body> </html> 

这是奇怪的,因为我已经创build了上传文件夹,并设置相关的权限,我可以完美地上传PNG文件,但是当我尝试上传JPG, 我不断收到错误“文件只是部分上传”根据$错误数组输出。 有问题的文件不是很大,大约在60-80 Kb。 我是新来的,只是想知道是否有任何明显错误的上面的代码会导致此错误,或者如果它是服务器?

我也configuration了我的php.ini,并设置了file_uploads。 我在Ubuntu上运行Nginx的PHP 5.6。

任何帮助表示赞赏。 谢谢!

这可能是因为in_array区分大小写的 。 而是使用strtolower()并使你的mime类型为小写。

 $allowed = array ('image/pjpeg', 'image/jpeg', 'image/jpg', 'image/x-png', 'image/png'); if (in_array(strtolower($_FILES['upload']['type']), $allowed)) { ... 
 <?php if($_FILES['upload']['name'] != ''){ $allowed_ext = array("gif","jpg","jpeg","png","GIF","JPG","JPEG","PNG"); $filename = $_FILES['upload']['name']; $ext = end(explode(".", $filename)); if(!in_array($ext,$allowed_ext)){echo '<p class="error">Please upload a JPEG or PNG image.</p>';} else{ $rand1 = time(); $image_name = $rand1.'.'.$ext; //for rename image name $path = "upload/".$image_name; //for image path move_uploaded_file($_FILES["upload"]["tmp_name"], $path); } }