【发布时间】:2011-10-04 04:49:12
【问题描述】:
更新:我已经清理了我的表单和图像验证。我放弃了查找图像扩展名的原始方法,并首先使用 getimagesize() 验证上传的文件是图像。从那里,我通过使用 pathinfo() 获取扩展名并将其与包含 jpg 和 jpeg 的数组匹配来确保图像是 jpg 或 .jpeg。
然后我确保文件已成功上传,然后成功地从临时位置移动到我设置的位置。下一步是使用“imagecreatefromjpeg”创建新图像,但我收到了错误
致命错误:第 48 行的 FILENAME.php 中允许的内存大小为 33554432 字节已用尽(尝试分配 13056 字节)
这是我感到困惑的地方,因为我尝试上传的图像远低于我的最大文件大小 2MB(图像为 410k)。不太清楚为什么它会超过我的服务器的 32MB 内存限制。
<?php
if(isset($_POST['uploadImage'])){
// set variables for uploaded file
$uploadTempPath = $_FILES['uploadFile']['tmp_name'];
$uploadSize = $_FILES['uploadFile']['size'];
$uploadLimit = 2097152; /* 2mb max file size */
$uploadName = strtolower($_FILES['uploadFile']['name']); // grab upload filename and lowercase the extension (.JPG -> .jpg)
// check if something was uploaded
if (empty($uploadTempPath)){
echo '<script language="JavaScript">';
echo 'alert("You did not upload anything!!")';
echo '</script>';
$errors .= 'You did not upload an image <br>';
}
// if all required fields were filled and a file was actually selected to upload
if (empty($errors)) :
// 1A. Check that file uplaoded is a valid image
if ( getimagesize($_FILES['uploadFile']['tmp_name']) ) :
// 2B. Verify that image extension was a jpg or jpeg
$imgExt = pathinfo( $_FILES['uploadFile']['name'] , PATHINFO_EXTENSION );
$validExt = array( 'jpg', 'jpeg' );
if ( in_array($imgExt, $validExt) ) :
// 3A. Make sure image was uploaded successfully
if (is_uploaded_file($_FILES['uploadFile']['tmp_name'])) :
$uploadPath = 'images/uploads/';
$imgWidth = '620';
$imgFilename = pathinfo( $_FILES['uploadFile']['name'] , PATHINFO_BASENAME );
$newPath = $uploadPath . $imgFilename;
// 4A. Move uploaded file from temporary path to new path
if(move_uploaded_file ($uploadTempPath , $newPath)) :
$img = imagecreatefromjpeg($newPath);
// PRINT OUT INFORMATION IF ALL IS CORRECT SO FAR
echo 'File was moved <br>';
echo 'Maximum file size: ' . $uploadLimit . '<br>';
echo 'Uploaded file size: ' . $uploadSize . '<br>';
echo 'Filename: ' . $imgFilename . '<br>';
echo 'New Path: ' . $newPath . '<br>';
echo 'File extension: ' . pathinfo($_FILES['uploadFile']['name'], PATHINFO_EXTENSION) . '<br>';
// 4B. Image was not successful in being moved
else :
echo 'Image was NOT moved! <br>';
endif; // END 4
// 3B. Image was not uploaded..
else :
// beware of an ATTACK!
echo 'Image was not uploaded. <br>';
endif; // END 3
// 2B. File was not a jpg or jpeg
else :
echo '<script language="JavaScript">';
echo 'alert("Your image is not a jpeg! Its a ' . pathinfo($_FILES['uploadFile']['name'] , PATHINFO_EXTENSION) . '")';
echo '</script>';
$errors .= 'NOT A JPEG! <br>';
endif; // END 2
// 1B. File uploaded was not a valid image
else :
echo '<script language="JavaScript">';
echo 'alert("Invalid Image!")';
echo '</script>';
$errors .= 'The file you uploaded is not a valid image file <br>';
endif; // END 1
endif; // endif empty errors
}
?>
【问题讨论】:
-
请打开错误:
error_reporting(E_ALL);和ini_set('display_errors' , 1);,而不是在您的问题中发布,这可能是运行时的一些错误。 -
1) 如果出现错误,您不会停止脚本,因此无论如何您都将继续调整大小。 2)你的图片验证很差
-
您能在 submit.php 中指出第 40 行吗?
-
第 40 行: if ( preg_match ('/[.](jpg)|(jpeg)$/' , $uploadNewName )) { $img = imagecreatefromjpeg($uploadNewPath . $uploadNewName); }
-
你似乎在这里耗尽了所有可用内存:)
标签: php forms file-upload filesize