【发布时间】:2014-06-21 09:42:27
【问题描述】:
嘿,我制作了一个显示远程 url 大小的程序,但我不希望输出像 4.3224256231 MB 那样,我希望只有前 3 位数字应该像 4.32 MB 这样的输出。这是我的 PHP 代码:-
<?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\r\n");
fputs($fp, "HOST: " . $host . "\r\n");
fputs($fp, "User-Agent: http://www.example.com/my_application\r\n");
fputs($fp, "Connection: close\r\n\r\n");
$headers = "";
while (!feof($fp)) {
$headers .= fgets ($fp, 128);
}
}
fclose ($fp);
$return = -2;
$arr_headers = explode("\n", $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)
?>
请帮我做这件事。
【问题讨论】:
-
这真的是你应该能够自己找到的东西......只需在谷歌中输入“PHP 整数”即可产生 大量 的结果和示例。在 round/floor/ceil/sprintf 上的 PHP 文档中也有很多示例。
-
使用 PHP Round 函数
-
另外:我不认为除以
1048会产生正确的结果... 千字节中有2^10 = 1024字节,千字节 => 兆字节等也是如此. -
用户
round()函数