2011-06-07 36 views
17

php cách lấy kích thước hình ảnh web bằng kb?php làm thế nào để có được kích thước hình ảnh web trong kb?

getimagesize chỉ nhận được chiều rộng và chiều cao.

filesize gây ra 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

Có cách nào khác để có được một kích thước hình ảnh web trong kb?

+1

thể trùng lặp của [PHP: kích thước tập tin từ xa mà không cần tải file] (http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file) – deceze

+0

Điều này dường như có liên quan: [link] http://stackoverflow.com/questions/2145021/php-getimagesize-alternatives-without-javascript [/ link] – knurdy

Trả lời

18

ngắn làm một yêu cầu HTTP hoàn chỉnh, không có cách nào dễ dàng:

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

Bạn có thể sử dụng cURL tuy nhiên để gửi lighter HEAD request instead.

+0

tuyệt vời, get_headers chạy nhanh hơn. Cảm ơn. –

+2

Đảm bảo máy khách HTTP của bạn không gửi bất kỳ tiêu đề nào nói rằng nó chấp nhận các phản hồi HTTP được nén, nếu không thì 'Nội dung dài 'sẽ sai vì máy chủ sẽ gửi dữ liệu đã nén trở lại. – Darien

+0

@Darien: Bắt tuyệt vời! May mắn là 'get_headers' gửi một yêu cầu HTTP/1.0 khá đơn giản. Nhưng đối với cURL, điều này sẽ cần sự tích cực hơn. – mario

3

Điều đó nghe giống như vấn đề quyền vì tệp() sẽ hoạt động tốt.

Dưới đây là một ví dụ:

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

Hãy chắc chắn rằng các điều khoản được quy định một cách chính xác vào hình ảnh và con đường cũng là đúng. Bạn sẽ cần phải áp dụng một số toán học để chuyển đổi từ byte sang KB nhưng sau khi làm điều đó bạn nên ở trong tình trạng tốt!

5
<?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 
?> 
1

Dưới đây là một liên kết liên quan đến tốt filesize()

Bạn không thể sử dụng filesize() để lấy thông tin tập tin từ xa. Nó trước tiên phải được tải về hoặc được xác định bằng phương pháp khác

Sử dụng Curl đây là một phương pháp tốt:

Tutorial

1

Bạn có thể sử dụng chức năng này cũng

<?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; 
} 
?> 
0

Bạn có thể lấy kích thước tập tin bằng cách sử dụng các get_headers() chức năng. Sử dụng mã dưới đây:

$image = get_headers($url, 1); 
    $bytes = $image["Content-Length"]; 
    $mb = $bytes/(1024 * 1024); 
    echo number_format($mb,2) . " MB"; 
Các vấn đề liên quan