使用php获取另一个域上的js文件的文件大小

时间:2012-01-11 14:15:25

标签: php cross-domain filesize

如何在其他网站上获取js文件的文件大小。我正在尝试创建一个监视器来检查js文件是否存在,并且它更多是0字节。

例如在bar.com上我会有以下代码:

$filename = 'http://www.foo.com/foo.js';
echo $filename . ': ' . filesize($filename) . ' bytes';

4 个答案:

答案 0 :(得分:3)

您可以使用HTTP HEAD请求。

<?php
 $url = "http://www.neti.ee/img/neti-logo.gif";
 $head = get_headers($url, 1);
 echo $head['Content-Length'];
?>

注意:这不是真正的HEAD请求,而是PHP为其Content-Length解析的GET请求。不幸的是,PHP函数名称非常具有误导性。这对于小js文件来说可能就足够了,但是对于更大的文件大小,使用带有Curl的真实HTTP头请求,因为服务器不必上传整个文件而只发送头文件。

对于这种情况,请使用Jakub提供的代码。

答案 1 :(得分:1)

只需使用CURL,这里列出了一个很好的例子:
参考: http://www.php.net/manual/en/function.filesize.php#92462

<?php
$remoteFile = 'http://us.php.net/get/php-5.2.10.tar.bz2/from/this/mirror';
$ch = curl_init($remoteFile);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //not necessary unless the file redirects (like the PHP example we're using here)
$data = curl_exec($ch);
curl_close($ch);
if ($data === false) {
  echo 'cURL failed';
  exit;
}

$contentLength = 'unknown';
$status = 'unknown';
if (preg_match('/^HTTP\/1\.[01] (\d\d\d)/', $data, $matches)) {
  $status = (int)$matches[1];
}
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) {
  $contentLength = (int)$matches[1];
}

echo 'HTTP Status: ' . $status . "\n";
echo 'Content-Length: ' . $contentLength;
?>
  

结果:

     

HTTP状态:302
  内容长度:8808759

答案 2 :(得分:0)

答案 3 :(得分:0)

这只是一个两步过程:

  1. 抓取js文件并将其存储到变量
  2. 检查js文件的长度是否大于0
  3. 多数民众赞成!!

    以下是如何在PHP中执行此操作

    <?php
    
    $data = file_get_contents('http://www.foo.com/foo.js');
    
    if(strlen($data)>0):
        echo "yay"
    else:
        echo "nay"
    ?>
    

    注意:您可以按照Uku的建议使用HTTP Head,但如果您正在寻找页面内容,如果js文件包含内容,那么您将不得不再次抓取:(