20

phpウェブ画像のサイズをKB単位で取得する方法は?

getimagesize幅と高さのみを取得します。

filesize引き起こしwaringた。

$imgsize=filesize("http://static.adzerk.net/Advertisers/2564.jpg");
echo $imgsize;

Warning: filesize() [function.filesize]: stat failed for http://static.adzerk.net/Advertisers/2564.jpg

Web画像のサイズをKB単位で取得する他の方法はありますか?

4

7 に答える 7

25

完全なHTTPリクエストを実行する以外に、簡単な方法はありません。

$img = get_headers("http://static.adzerk.net/Advertisers/2564.jpg", 1);
print $img["Content-Length"];

ただし、代わりに軽いリクエストcURLを送信するために利用できる可能性があります。HEAD

于 2011-06-07T23:27:37.990 に答える
6
<?php
$file_size = filesize($_SERVER['DOCUMENT_ROOT']."/Advertisers/2564.jpg"); // Get file size in bytes
$file_size = $file_size / 1024; // Get file size in KB
echo $file_size; // Echo file size
?>
于 2011-06-07T23:26:50.937 に答える
3

リモートファイルの使用filesize()についてはよくわかりませんが、cURLの使用については、php.netに優れたスニペットがあります。

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

于 2011-06-07T23:30:12.697 に答える
2

filesize()は問題なく機能するはずなので、これは権限の問題のように聞こえます。

次に例を示します。

php > echo filesize("./9832712.jpg");
1433719

画像に権限が正しく設定されていることと、パスも正しいことを確認してください。バイトからKBに変換するには、いくつかの数学を適用する必要がありますが、それを実行した後は、良好な状態になっているはずです。

于 2011-06-07T23:26:14.323 に答える
1

filesize()に関する適切なリンクは次のとおりです。

filesize()を使用してリモートファイル情報を取得することはできません。最初にダウンロードするか、別の方法で決定する必要があります

ここでCurlを使用するのは良い方法です:

チュートリアル

于 2011-06-07T23:27:19.970 に答える
1

この機能も使えます

<?php
$filesize=file_get_size($dir.'/'.$ff);
$filesize=$filesize/1024;// to convert in KB
echo $filesize;


function file_get_size($file) {
    //open file
    $fh = fopen($file, "r");
    //declare some variables
    $size = "0";
    $char = "";
    //set file pointer to 0; I'm a little bit paranoid, you can remove this
    fseek($fh, 0, SEEK_SET);
    //set multiplicator to zero
    $count = 0;
    while (true) {
        //jump 1 MB forward in file
        fseek($fh, 1048576, SEEK_CUR);
        //check if we actually left the file
        if (($char = fgetc($fh)) !== false) {
            //if not, go on
            $count ++;
        } else {
            //else jump back where we were before leaving and exit loop
            fseek($fh, -1048576, SEEK_CUR);
            break;
        }
    }
    //we could make $count jumps, so the file is at least $count * 1.000001 MB large
    //1048577 because we jump 1 MB and fgetc goes 1 B forward too
    $size = bcmul("1048577", $count);
    //now count the last few bytes; they're always less than 1048576 so it's quite fast
    $fine = 0;
    while(false !== ($char = fgetc($fh))) {
        $fine ++;
    }
    //and add them
    $size = bcadd($size, $fine);
    fclose($fh);
    return $size;
}
?>
于 2013-12-16T15:32:22.120 に答える
0

get_headers()関数を使用してファイルサイズを取得できます。以下のコードを使用してください:

    $image = get_headers($url, 1);
    $bytes = $image["Content-Length"];
    $mb = $bytes/(1024 * 1024);
    echo number_format($mb,2) . " MB";
于 2016-08-16T06:13:55.100 に答える