【问题标题】:PHP filesize for absolute path绝对路径的 PHP 文件大小
【发布时间】:2010-11-13 13:29:36
【问题描述】:

我很惊讶 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

不下载文件也可以吗?

【问题讨论】:

  • 如果你给它一个文件系统 URL,而不是一个 HTTP URL,它会起作用。 PHP 应该如何知道如何将上述 URL 解析到本地文件系统?
  • 我从来没有听说过使用绝对路径有问题,我也从来没有遇到过。您使用的是哪个操作系统,您能否举一个不起作用的代码示例?
  • 嗯,现在我想起来了,是的,我明白了。可怜的PHP..
  • @Alex 我在带有 XAMPP 的 OSX 上,它在这里不起作用。我在网上试试。

标签: php filesize


【解决方案1】:

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 的手册页中提到的那样。

【讨论】:

    【解决方案2】:

    是的,一切都会好起来的。

    $filename = 'http://172.16.xx.x/app/albums/002140/tn/020.jpg';
    
    $headers  = get_headers($filename, 1);
    
    $fsize    = $headers['Content-Length'];
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用 ... 通过 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;
      

      【讨论】:

        【解决方案4】:

        正如我所怀疑的,您尝试将 HTTP URL 提供给 filesize(),但这是行不通的。 filesize() 适用于本地文件系统 URL,例如 http://www.php.net/manual/en/wrappers.file.php 中列出的那些。

        大概,当您尝试访问自己服务器上的文件时,您必须拥有文件系统 URL,而不仅仅是 HTTP URL?

        【讨论】:

        • @FFish:它确实适用于绝对路径,但它们必须是文件系统路径。
        【解决方案5】:

        使用函数filesize();

        你应该有绝对路径而不是网址

        http://www.php.net//manual/en/function.filesize.php

        【讨论】:

          【解决方案6】:

          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。让我知道是不是这样。

          【讨论】:

            【解决方案7】:

            我认为你必须使用filesize() 函数。

            http://php.net/manual/en/function.filesize.php

            echo filesize( $filename );
            

            【讨论】:

            • @FFish:您需要给出一些不起作用的代码的具体示例。
            猜你喜欢
            • 1970-01-01
            • 2010-12-17
            • 2021-10-18
            • 2016-07-23
            • 1970-01-01
            • 2011-07-09
            • 1970-01-01
            • 1970-01-01
            • 2010-12-17
            相关资源
            最近更新 更多