为什么 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" 之间的区别。
我有一个 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" 之间的区别。