
18.01.2008, 13:35
|
|
Познавший АНТИЧАТ
Регистрация: 12.05.2007
Сообщений: 1,235
Провел на форуме: 2238549
Репутация:
1318
|
|
Можешь привести пример кода?
PHP код:
<?php
/**
* Remote size fetcher function
*
* Retrieve the size of remote file
* from it's Content-Length header at
* HEAD method request
*
* @param string URL of remote file
* @return mixed double - the size of
* remote file in bytes,
* or false at failed
* operation.
*/
function getRemoteFileSize ($remoteUrl) {
$urlData = parse_url($remoteUrl);
if (!isset($urlData["host"])) return false;
if (!isset($urlData["port"])) $urlData["port"] = 80;
if (!isset($urlData["path"])) $urlData["path"] = "/";
$socket = fsockopen($urlData["host"], $urlData["port"], $errno, $errstr, 60);
if (!$socket) return false;
$resource = $urlData["path"];
if (isset($urlData["query"])) $resource .= "?{$urlData["query"]}";
$sendData = "HEAD {$resource} HTTP/1.1\r\n";
$sendData .= "Host: {$urlData["host"]}\r\n";
$sendData .= "User-Agent: DaMaGeLaB file fetcher\r\n";
$sendData .= "Accept: */*\r\n";
$sendData .= "Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\r\n";
$sendData .= "Pragma: no-cache";
$sendData .= "Connection: Close\r\n\r\n";
$ret = fwrite($socket, $sendData);
if (!$ret) return false;
$buffer = "";
while (!feof($socket)) {
$buffer .= fgets($socket, 8192);
}
fclose($socket);
list($headers, $content) = preg_split("/\r\n\r\n/", $buffer, 2);
if (strlen($headers) <= 0) return false;
$httpCode = intval(substr($headers, 9, 3));
if ($httpCode != 200) return false;
if (!preg_match("/Content\-Length: (\d+)\r\n/i", $headers, $matches))
return false;
return doubleval($matches[1]);
}
$ret = getRemoteFileSize ("http://ya.ru");
if (!$ret) exit("Couldn't get remote file size");
printf("Size of remote file is: %s bytes", $ret);
?>
Последний раз редактировалось groundhog; 18.01.2008 в 13:39..
|
|
|