Remote file size without downloading file

前端 未结 14 1672
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-11-22 03:01

Is there a way to get the size of a remote file http://my_url/my_file.txt without downloading the file?

14条回答
  •  遇见更好的自我
    2020-11-22 03:13

    Try this: I use it and got good result.

        function getRemoteFilesize($url)
    {
        $file_headers = @get_headers($url, 1);
        if($size =getSize($file_headers)){
    return $size;
        } elseif($file_headers[0] == "HTTP/1.1 302 Found"){
            if (isset($file_headers["Location"])) {
                $url = $file_headers["Location"][0];
                if (strpos($url, "/_as/") !== false) {
                    $url = substr($url, 0, strpos($url, "/_as/"));
                }
                $file_headers = @get_headers($url, 1);
                return getSize($file_headers);
            }
        }
        return false;
    }
    
    function getSize($file_headers){
    
        if (!$file_headers || $file_headers[0] == "HTTP/1.1 404 Not Found" || $file_headers[0] == "HTTP/1.0 404 Not Found") {
            return false;
        } elseif ($file_headers[0] == "HTTP/1.0 200 OK" || $file_headers[0] == "HTTP/1.1 200 OK") {
    
            $clen=(isset($file_headers['Content-Length']))?$file_headers['Content-Length']:false;
            $size = $clen;
            if($clen) {
                switch ($clen) {
                    case $clen < 1024:
                        $size = $clen . ' B';
                        break;
                    case $clen < 1048576:
                        $size = round($clen / 1024, 2) . ' KiB';
                        break;
                    case $clen < 1073741824:
                        $size = round($clen / 1048576, 2) . ' MiB';
                        break;
                    case $clen < 1099511627776:
                        $size = round($clen / 1073741824, 2) . ' GiB';
                        break;
                }
            }
            return $size;
    
        }
        return false;
    }
    

    Now, test like these:

    echo getRemoteFilesize('http://mandasoy.com/wp-content/themes/spacious/images/plain.png').PHP_EOL;
    echo getRemoteFilesize('http://bookfi.net/dl/201893/e96818').PHP_EOL;
    echo getRemoteFilesize('https://stackoverflow.com/questions/14679268/downloading-files-as-attachment-filesize-incorrect').PHP_EOL;
    

    Results:

    24.82 KiB

    912 KiB

    101.85 KiB

提交回复
热议问题