繁体   English   中英

php - 如何确保上传的文件是jpg,gif或png?

[英]php - how to make sure that the uploaded file is a jpg, gif or png?

在php中,我可以通过扩展检查上传的文件是否具有正确的类型,因此代码应如下所示:

if ((($_FILES["photo1"]["type"] == "image/gif")
|| ($_FILES["photo1"]["type"] == "image/jpeg")
|| ($_FILES["photo1"]["type"] == "image/png"))
&& ($_FILES["photo1"]["size"] < 500000)) //also limiting size

然后在我的代码的下一步中,我准备一个文件进行进一步处理。 但是如果有人在上传之前将text_file.doc或javascript_file.js更改为samplefile.jpg会怎样?

move_uploaded_file(($_FILES['photo1']['tmp_name']), "photos/1.jpg");
$source1 = imagecreatefromjpeg("../photos/source1.jpg");

然后用户将看到来自imagecreatefromjpeg步骤的错误:

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG
library reports unrecoverable error: in...

如果文件不是图形文件而不显示错误,如何跳过处理部分?

正如文件上传文档所述,声明$_FILES['userfile']['type']

文件的mime类型,如果浏览器提供了此信息。 一个例子是“image / gif”。 但是,在PHP端没有检查这个mime类型,因此不会将其值视为理所当然。

这意味着它不会在php端检查,你应该使用mime_content_type并确认它的mime类型。

或者,您可以使用getimagesize来实际检查已上载的文件是否具有图像大小,如果没有,则不是图像。

我会使用getimagesize并检查可能的错误,如下所示:

try {
    $size = getimagesize("your_image_file");
    echo 'image!';
} catch (Exception $e) {
    echo 'no known image format!'; 
}

这个GD功能并不完美,但它可以应对多种图像文件格式。

有几种方法可以省略PHP中的警告。 如果发生这样的错误,通常会发生。 要么在你的代码中期待它(通常是可取的,请参阅我的例子,尝试使用try ... catch)或者根据你的需要配置你的环境(省略警告)。

首先,您应该编辑php.ini以禁用向用户输出警告和错误消息,因此这些用户不会看到错误。 至少对于生产系统,建议这样做。

然后,您应该能够检查函数的返回值。 根据http://de.php.net/manual/en/function.imagecreatefromjpeg.php ,如果无法打开您提供的文件,则应返回false。

此外,通过异常处理(请参阅http://www.php.net/manual/en/language.exceptions.php ),您可以捕获并处理上面发布的错误消息和警告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM