【问题标题】:How do I validate an image file selection on php?如何验证 php 上的图像文件选择?
【发布时间】:2021-06-07 13:55:00
【问题描述】:

我有一个文件输入选择,格式如下,我使用 POST 方法发送数据。

<input type="file" name="inputFile">

我想验证用户是否选择了一个文件,并想检查该文件是否为图像文件(png、jpg)

我也卡住了,因为我的代码中的一行正在生成错误。为什么?

'数组键'inputFile'未定义'

if (isset($_POST['submit'])) {
   $file = $_FILES['inputFile']; //THIS LINE IS GENERATING AN ERROR
}

【问题讨论】:

  • php.net/manual/en/features.file-upload.php, php.net/manual/en/features.file-upload.post-method.php 。查看此处的示例和文档,确保您已按照步骤操作并包含了您需要的内容。例如,您是否确保在表单中输入 enctype="multipart/form-data"
  • 你是对的。我忘了包括 enctype,这就是为什么没有将密钥传递给 $_FILES 全局的原因。谢谢你。如果您想将其作为答案发布并且可能在验证部分即兴发挥,我很乐意将其标记为解决方案。
  • 不是很需要。几乎可以肯定它是许多以前问题的重复,无论是 enctype 问题还是如何验证图像都不是新知识或问题,您应该能够很容易地在 Google 上搜索现有示例。

标签: php file-upload


【解决方案1】:

见:https://www.php.net/manual/en/features.file-upload.post-method.php

foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
    // basename() may prevent filesystem traversal attacks;
    // further validation/sanitation of the filename may be appropriate
    $name = basename($_FILES["pictures"]["name"][$key]);
    move_uploaded_file($tmp_name, "data/$name");
}

}

另见: Undefined Array Key error when uploading image on php

看来您正在寻找 $_FILES["inputFile"]["name"] - 祝你好运

【讨论】:

    【解决方案2】:

    你可以使用类似的东西:

    <input type="file" name="myImage" accept="image/png, image/gif, image/jpeg" />
    

    并在没有 PHP 的情况下指定您想要的格式

    【讨论】:

    • 为了安全起见,还应始终添加服务器端验证。客户端验证增加了可用性,但绕过它是微不足道的。建议这样做很好,但也不要建议 OP 可以忘记在 PHP 中验证它,这会造成安全漏洞。
    • 正如上面的人所说,我正在寻找一种在服务器上进行验证的方法。不过还是谢谢你。
    猜你喜欢
    • 2023-01-24
    • 2011-11-16
    • 1970-01-01
    • 2017-03-26
    • 2018-07-19
    • 1970-01-01
    • 2011-08-02
    • 2017-03-06
    • 2018-04-03
    相关资源
    最近更新 更多