【问题标题】:PHP upload image script isn't workingPHP上传图片脚本不起作用
【发布时间】:2016-01-25 23:26:36
【问题描述】:
<?
if(isset($_POST['upload'])) {
    if(empty($_FILES['image'])) {
        echo "<p class=\"error\">Please upload an image...</p>\n";
    } else {
    $file_name= $_FILES['image']['name']; // original name
    $file_type = $_FILES['image']['type'];
    $file_size = $_FILES['image']['size'];
    $file_tmp = $_FILES['image']['tmp_name']; // temporary location on server
    $file_error = $_FILES['image']['error']; // reference to future error
    $file_ext = pathinfo($file_name, PATHINFO_EXTENSION);

    if($file_ext != "jpeg" || "jpg" || "gif" || "png") {
        echo "<p class=\"error\">Please upload an image that has the extension .jpg/jpeg, .gif, or .png.</p>\n";
    } else {
        if($file_size > (10000000)) {
            echo "<p class=\"error\">Please upload an image that does not exceed the file size of 10MB.</p>\n";
        } else {
            if($file_error) {
                echo "<p class=\"error\">Sorry, an unexpected error occurred: ".$file_error."</p>\n";
            } else {
                $f_rename = "pfp/".time().".png";
                move_uploaded_file($file_tmp,$f_rename);
                }
            }
       }
    }
}
?>
<!doctype html>
<html>
<head>
<title>Upload</title>
</head>
<body>
<form action="upload_test_image.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="image" />
    <input type="submit" name="upload" value="Upload"/>
</form>
</body>
</html>

由于无法通过文件扩展名检查,我无法上传任何图片。在我写这篇文章时,我还试图剖析问题是否正是扩展验证问题(可能只是打印出我发出的错误声明,因为它是第一个 if...否则声明)。任何人都可以帮助找到该代码或此代码中的问题吗?

【问题讨论】:

  • 要进行故障排除,请尝试输出 $file_ext 的值(以及 $file_name 的值)。
  • 它返回空,所以显然这不是扩展错误,如果我只是按下表单中的上传按钮,它会给出同样的错误,所以问题在于实际上传图像。感谢您的提示。

标签: php html webforms image-uploading


【解决方案1】:

pathinfo() 将需要文件的路径而不仅仅是文件名。 要获得扩展,你可以试试这个:

$extension = preg_replace('@.+\.@', '', $_FILES['image']['name'])

或者,您可以检查 $_FILES['image']['type'] 因为它可能具有您正在寻找的类型。 finfo 也可能有帮助: http://php.net/manual/en/function.finfo-file.php

【讨论】:

  • 它没有解决扩展问题,但它帮助我意识到上传文件的位置存在问题。但是仍然没有解决它,但我知道这就是问题所在。你能帮忙吗?
  • 它没有解决扩展问题,但它帮助我意识到上传文件的位置存在问题。但是仍然没有解决它,但我知道这就是问题所在。你能帮忙吗?
【解决方案2】:

我不认为你可以在 PHP 中做这样的布尔条件。

这样怎么样,声明一个允许的扩展数组:

$extensions = array("jpeg", "jpg", "gif","png");

然后检查文件扩展名是否在数组中:

if(!in_array($file_ext, $extensions)) {
    //Please upload an image that has the extension .jpg/jpeg, .gif, or .png.
}

【讨论】:

  • 它没有解决扩展问题,但它帮助我意识到上传文件的位置存在问题。但是仍然没有解决它,但我知道这就是问题所在。你能帮忙吗?
  • 你能告诉我你在哪里测试过这个吗?我自己可能已经解决了这个问题,但我很愿意听听你是如何测试这个的。
  • 它有效,结果证明我在脚本中使用的路径信息是导致中断的原因。谢谢你帮助我!
猜你喜欢
  • 2012-10-26
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多