该问题还要求我们找到URL的总下载大小。但是,如果传入脚本的URL只指向单个文件资源(如JPG文件或GIF文件),该怎么办?好吧,对于单个文件资源,我们只需要找到该特定文件的大小,然后将其作为答案返回,我们就完成了。但是,对于HTML文档,我们需要找到嵌入并包含在页面中的所有资源的总大小,并将其作为答案返回
function get_remote_file_size($url) {
$headers = get_headers($url, 1);
if (isset($headers['Content-Length']))
//checks for lower case "L" in Content-length:
if (isset($headers['Content-length']))
return $headers['Content-length'];
}
答案 0 :(得分:2)
这实际上是一个非常复杂的问题,而且没有明确的答案。你需要查阅很多东西,所以我会引导你完成这些步骤。
src
,<img>
,<video>
,<script>
等的<iframe>
属性。不要忘记CSS {{1} }}。但这并不是万能的。你现在有了一个新问题。如果JavaScript加载更多脚本怎么办?也许它通过AJAX添加数据?也许CSS引用了一些图形或其他CSS?也许嵌入字体?
更糟糕的是,有时这些东西都是定时的。有时,脚本不会加载某些东西,直到有用户交互,或者在加载几秒钟之后。
最重要的是,不要忘记加载的每件新物品都可以带来自己的东西。 (例如广告通常会加载几个东西。)
您可以做的最好的事情是使用像PhantomJS这样的无头浏览器,加载页面并让脚本运行,并跟踪下载的所有资源。然后,等待几秒钟(或者如果您愿意,可以直到页面加载为止),并将其添加。但是,在页面完成时,没有万无一失的确定时间。
答案 1 :(得分:-3)
get_headers函数接受一个URL作为参数。因此,用于检索“Content-Length
”标头的PHP代码将如下所示
function get_remote_file_size($url) {
$headers = get_headers($url, 1);
if (isset($headers['Content-Length']))
return $headers['Content-Length'];
//checks for lower case "L" in Content-length:
if (isset($headers['Content-length']))
return $headers['Content-length'];
}