为什么 getimagesize() 函数对于传递的不同参数 [index from $_FILES super-global array] 表现不同?

Why the getimagesize() function is behaving differently for different parameter[index from $_FILES super-global array] passed?

我有一个 HTML 表单,其中包含用于 select 图像文件并将其上传到服务器的代码。

我在 PHP 中还有一个不完整的代码,直到获得用户上传到服务器的图像的大小。

请查看下面的代码片段。

HTML 表单代码:

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

PHP 代码 1 :

<?php
$target_dir = "C:/xampp/htdocs/php_playground/uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    echo "Check Value with tmp_name parameter : \n";
    echo "<pre>";
    print_r($check); 
    echo "</pre>";
    die;
}
?>

PHP 代码 1 的输出如下:

Check Value with tmp_name parameter :

Array
(
    [0] => 1536
    [1] => 2048
    [2] => 2
    [3] => width="1536" height="2048"
    [bits] => 8
    [channels] => 3
    [mime] => image/jpeg
)

PHP 代码 2 :

 <?php
    $target_dir = "C:/xampp/htdocs/php_playground/uploads/";
    $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["fileToUpload"]["name"]);
        echo "Check Value with name parameter : \n";
        echo "<pre>";
        print_r($check); 
        echo "</pre>";
        die;
    }
    ?>

PHP 代码 2 的输出如下:

警告:getimagesize(demo_image.jpg):无法打开流:C:\xampp\htdocs\php_playground\uploads\upload 中没有这样的文件或目录。 php 在线 8

使用名称参数检查值:

现在,我的查询是因为我试图在上述两个程序中上传相同的图像,为什么我为 getimagesize() 函数获得两个不同的输出以更改索引值 $_FILES数组?

请指导我这方面的问题。

谢谢。

因为在您使用 "name" 的第二个代码中,函数 getimagesize 无法读取文件。

原因如下:

"name" 变量来自您的浏览器,因此在服务器端该函数无法定位图像,因此无法提供信息并生成警告。 "tmp_name" 是服务器端位置的临时路径,上传文件临时存储在该位置。因此,当您使用 "temp_name" 时,该函数能够读取文件并为您提供信息。

有关更多信息,只需打印您的 $_FILES 变量以查看 "name" 和 "tmp_name" 之间的区别。

参考:http://php.net/manual/en/reserved.variables.files.php