警告:文件大小():img.jpg 的统计失败


Warning: filesize(): stat failed for img.jpg

我正在尝试获取图像的文件大小,但一直得到Warning: filesize(): stat failed for img.jpg

这是我所做的:

$path = $_FILES['profile']['name'];
$path = iconv('UTF-8', 'ISO-8859-1',$path);
if (!in_array(pathinfo($path,PATHINFO_EXTENSION),$allowed)) {
    return "file";
} elseif (filesize($path)>(1024*600))

我能够获得文件扩展名没有问题,但filesize()似乎不起作用。我一直在阅读一些,确实发现了这个,但它并没有解决问题。 任何帮助都非常感谢!

$_FILES 数组中的['name']是客户端计算机上文件的名称。它只是信息,与服务器上实际存储的内容完全无关。您需要查看 ['tmp_name'] ,这是 PHP 在上传完成后将文件临时存储在服务器上的位置:

$path = $_FILES['profile']['tmp_name'];
                          ^^^^^^^^^^^^

$_FILES['profile']['name']只有文件名

$_FILES['profile']['tmp_name'] 

将为您提供系统上文件的临时路径。这是http://php.net/manual/en/reserved.variables.files.php

您也可以通过以下方式访问文件大小

$_FILE['profile']['size']
echo "---- NULL ---------------'n";
$path = null;
echo "File size is: " . filesize($path) . "'n";
echo "---- FILE EXISTS --------'n";
$path = '/home/luca/Scrivania/file_that_exists.jpg';
echo "File size is: " . filesize($path) . "'n";
echo "---- FILE NOT EXISTS ----'n";
$path = 'file/does/not/exists.jpg';
echo "File size is: " . filesize($path) . "'n";

将导致:

---- NULL ---------------
File size is: 
---- FILE EXISTS --------
File size is: 78953
---- FILE NOT EXISTS ----
Warning: filesize(): stat failed for file/does/not/exists.jpg in /home/luca/Scrivania/test.php on line 13
Call Stack:
    0.0001     642120   1. {main}() /home/luca/Scrivania/test.php:0
    0.0002     642448   2. filesize() /home/luca/Scrivania/test.php:13

这意味着您的变量

$_FILES['profile']['name'];

不指向服务器上的有效文件位置,而是指向以下位置之一:

  1. 客户端 PC(不在服务器上)上的文件路径,在这种情况下,您肯定无法直接访问它
  2. 不是字符串的东西
  3. 但它不是空的(否则你只需要返回null(见第一个示例)

请下次发布有效的PHP代码。

卢卡

更新

正如Marc B建议的那样,你必须使用$_FILES['profile']['tmp_name'];