我正在尝试编写一个上传脚本,该脚本在上传时只接受PNG图像。上传脚本运行良好,但当我添加png图像检测时,它会中断。
以下是我如何设置的:
if ($_FILES) {
if ($_FILES["file"]["type"] == "image/png") {
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file ". basename( $_FILES['uploadedfile']['name']).
" has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
} else { echo "Not A PNG…";
}
}
当我上传PNG图像时,我会收到"不是PNG"的错误——有什么想法吗?
看起来您在IF语句中引用了错误的文件:
if ($_FILES["file"]["type"] == "image/png") {
应该是
if ($_FILES["uploadedfile"]["type"] == "image/png") {
("文件"需要"上传文件")
我看到一些服务器没有在$_FILES变量中添加mime类型的image/png。。。有一种稍微重一点的CPU方式:
if (@imagecreatefrompng($_FILES["file"]["tmp_name"])
当您使用GD库打开图像画布时,此处的性能将略有降低
如果性能或缺少GD库是一个问题,只需检查扩展:
if (strtolower(end(explode('.',$_FILES["file"]["name"])) == 'png')
注意如果您想使用imagecreatefrompng函数,建议确保安装了GD:if (function_exists('imagecreatefrompng'))
重要如果你对内存使用很谨慎(你应该这样做),那么就做这个
if ($image = @imagecreatefrompng($_FILES["file"]["tmp_name"]) {
// Do something
imagedestroy($image);
}
- 切勿将
$_FILES[...]['type']
用于任何用途。它只是一个任意的、用户提供的字符串,可能与实际文件有关,也可能与实际的文件无关 - 因此,请自己检查MIME类型
- 启用
error_reporting(E_ALL); ini_set('display_errors', true);
,这将帮助您查找特定的拼写错误 - 习惯早期失败
2和4的示例:
if (!empty($_FILES['uploadedfile'])) {
if ($_FILES['uploadedfile']['error'] !== UPLOAD_ERR_OK) {
die('Error during upload');
}
if (exif_imagetype($_FILES['uploadedfile']['tmp_name']) !== IMAGETYPE_PNG) {
die('Wrong file type');
}
...
}