This question already has an answer here:
Hey i made a program which is showing the size of the remote url but i don't wanted the output to come like 4.3224256231 MB , i want that only first 3 digits should come as a output like 4.32 MB. Here is my PHP code:-
<?php
function remote_file_size($url){
$head = "";
$url_p = parse_url($url);
$host = $url_p["host"];
if(!preg_match("/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/",$host)){
$ip=gethostbyname($host);
if(!preg_match("/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/",$ip)){
return -1;
}
}
if(isset($url_p["port"]))
$port = intval($url_p["port"]);
else
$port = 80;
if(!$port) $port=80;
$path = $url_p["path"];
$fp = fsockopen($host, $port, $errno, $errstr, 20);
if(!$fp) {
return false;
} else {
fputs($fp, "HEAD " . $url . " HTTP/1.1
");
fputs($fp, "HOST: " . $host . "
");
fputs($fp, "User-Agent: http://www.example.com/my_application
");
fputs($fp, "Connection: close
");
$headers = "";
while (!feof($fp)) {
$headers .= fgets ($fp, 128);
}
}
fclose ($fp);
$return = -2;
$arr_headers = explode("
", $headers);
foreach($arr_headers as $header) {
$s1 = "HTTP/1.1";
$s2 = "Content-Length: ";
$s3 = "Location: ";
if(substr(strtolower ($header), 0, strlen($s1)) == strtolower($s1)) $status = substr($header, strlen($s1));
if(substr(strtolower ($header), 0, strlen($s2)) == strtolower($s2)) $size = substr($header, strlen($s2));
if(substr(strtolower ($header), 0, strlen($s3)) == strtolower($s3)) $newurl = substr($header, strlen($s3));
}
if(intval($size) > 0) {
$return=intval($size);
} else {
$return=$status;
}
if (intval($status)==302 && strlen($newurl) > 0) {
$return = remote_file_size($newurl);
}
return $return;
}
$file= remote_file_size("http://funchio.com/mp3/download.php?hash=7RLenrUE&name=nagada%20sang%20dhol%20baje-ramleela");
$p=$file/1048;
$m=$p/1048;
echo $m. " MB";
substr_replace($m, "", -9)
?>
Please help me to do this.
</div>
User number_format();
First parameter is the number being formatted. and the second parameter is number of decimal points.
echo number_format($m,3). " MB";
try..
echo round($m, 2);
echo round(4.3224256231, 2);
output: 4.32
you might also add additional logic that specifies GB
Use this simple function for getting remote filesize. Your function is too redundant.
function remote_filesize($url) {
static $regex = '/^Content-Length: *+\K\d++$/im';
if (!$fp = @fopen($url, 'rb')) {
return false;
}
if (
isset($http_response_header) &&
preg_match($regex, implode("
", $http_response_header), $matches)
) {
return (int)$matches[0];
}
return strlen(stream_get_contents($fp));
}