2012-01-11 3 views
2

Как получить размер файла js на другом веб-сайте. Я пытаюсь создать монитор, чтобы проверить, что файл js существует и что он больше 0 байтов.Получить файл js-файла в другом домене, используя php

Например, на bar.com у меня будет следующий код:

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

Возможный дубликат http://stackoverflow.com/questions/3251803/php-get-remote-file-size-with-strlen-html – Connum

ответ

3

Вы можете использовать запрос HTTP HEAD.

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

Примечание: это не настоящий запрос HEAD, а запрос GET, который PHP анализирует для его Content-Length. К сожалению, имя функции PHP довольно вводит в заблуждение. Этого может быть достаточно для небольших js-файлов, но использовать реальный запрос HTTP Head с Curl для больших размеров файлов, потому что тогда серверу не придется загружать весь файл и отправлять только заголовки.

В этом случае используйте код, предоставленный Jakub.

+1

Обратите внимание, что 'get_headers' по умолчанию выполняет запрос GET. См. Пример 2 в руководстве о том, как это изменить. – Gordon

+1

Да, только что заметил это сам. исправлено +1. –

1

Просто использовать CURL, здесь совершенно хороший пример в списке:
Ref: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

+0

Было бы лучше использовать запрос 'HEAD', Я думаю, – Timur

+0

Это запрос HEAD, обратите внимание на RETURNTRANSFER, true –

0
+0

Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259), чтобы включить основные части ответа здесь и предоставить ссылку для справки. –

0

Это только два этапа:

  1. просканировать файл JS и сохранить его в переменной
  2. Проверьте, если длина файла Js больше 0

это оно!!

Вот как вы можете это сделать в PHP

<?php 

$data = file_get_contents('http://www.foo.com/foo.js'); 

if(strlen($data)>0): 
    echo "yay" 
else: 
    echo "nay" 
?> 

Примечание: Вы можете использовать HTTP Head как предложено КСУ, но затем, если вы ищете для содержимого страницы, если JS файл имеет содержание, то вы бы для ползания снова :(

Смежные вопросы