警告:filesize():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()
似乎不起作用。我读了一些书,确实找到了 this,但它并没有解决问题。任何帮助深表感谢!
$_FILES 数组中的 ['name']
是 CLIENT 机器上的文件名。它只是信息,与您服务器上实际存储的内容完全无关。你需要查看['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
(见第一个例子)
请下次post有效PHP代码。
卢卡
更新
正如 Marc B 建议的那样,您必须使用 $_FILES['profile']['tmp_name'];
我正在尝试获取图像的文件大小,但我一直在获取 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()
似乎不起作用。我读了一些书,确实找到了 this,但它并没有解决问题。任何帮助深表感谢!
['name']
是 CLIENT 机器上的文件名。它只是信息,与您服务器上实际存储的内容完全无关。你需要查看['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
(见第一个例子)
请下次post有效PHP代码。
卢卡
更新
正如 Marc B 建议的那样,您必须使用 $_FILES['profile']['tmp_name'];