我正在尝试获取图像的文件大小,但一直得到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'];
不指向服务器上的有效文件位置,而是指向以下位置之一:
- 客户端 PC(不在服务器上)上的文件路径,在这种情况下,您肯定无法直接访问它
- 不是字符串的东西
- 但它不是空的(否则你只需要返回
null
(见第一个示例)
请下次发布有效的PHP代码。
卢卡
更新
正如Marc B建议的那样,你必须使用$_FILES['profile']['tmp_name'];