我很惊讶PHP的filesize()在绝对路径上失败了? 我的文件在我自己的服务器上,我怎样才能获得文件大小,除了将它们转换为相对文件(乱七八糟)
修改
示例:
$filename = 'http://172.16.xx.x/app/albums/002140/tn/020.jpg';
echo $filename . ': ' . filesize($filename) . ' bytes';
Warning: filesize() [function.filesize]: stat failed for http://172.16.xx.x/app/albums/002140/tn/020.jpg in /Applications/XAMPP/xamppfiles/htdocs/app/admin/+tests/filesize.php on line 26
结束编辑
我为远程文件找到了这个例子:
$filename = 'http://www.google.com/logos/2010/stevenson10-hp.jpg';
$headers = get_headers($filename, 1);
echo $headers['Content-Length']; // size in bytes
这是否可以在不下载文件的情况下工作?
答案 0 :(得分:5)
http://172.16.xx.x/app/albums/002140/tn/020.jpg
不是绝对路径,而是URL。它的绝对路径就像/var/www/app/albums/002140/tn/020.jpg
。您应该在filesize()
中使用该绝对路径。
filesize()
仅支持支持stat()
的URL包装器。 HTTP和HTTPS不支持HTTP and HTTPS wrappers的手册页中提到的那些。
答案 1 :(得分:2)
是的,它会正常工作。
$filename = 'http://172.16.xx.x/app/albums/002140/tn/020.jpg';
$headers = get_headers($filename, 1);
$fsize = $headers['Content-Length'];
答案 2 :(得分:2)
您可以像这样使用...按URL获取文件大小
$ch = curl_init('http://172.16.xx.x/app/albums/002140/tn/020.jpg');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$data = curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
echo $size;
答案 3 :(得分:1)
正如我所怀疑的,您正在尝试向filesize()
提供HTTP网址,但这不起作用。 filesize()
适用于本地文件系统网址,例如http://www.php.net/manual/en/wrappers.file.php中列出的网址。
据推测,当您尝试访问自己服务器上的文件时,您必须拥有文件系统URL,而不仅仅是HTTP URL?
答案 4 :(得分:1)
答案 5 :(得分:0)
get_headers()会向您的服务器发送一个GET,这会为您的Web服务器增加负载。
我没理解,你的filesize()在绝对路径上失败了吗?它不应该。根据php.net: http://www.php.net/manual/en/wrappers.file.php
修改强> 如果allow_url_fopen设置为0,我不确定PHP会给你的错误,但是在PHP.ini中检查这一行(然后重启apache):http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen
如果关闭,filesize()将不会处理URL。让我知道是不是。
答案 6 :(得分:-3)