Необходимо получить содержимое URL. Например, требуется вставить часть одной веб-страницы в содержимое другой страницы.
Передайте URL функции fopen() и получите содержимое страницы с помощью функции fread():
$page = '';
$fh = fopen('http://www.example.com/robots.txt','r') or die($php_errormsg);
while (! feof($fh)) {
$page .= fread($fh,1048576);
}
fclose($fh);
Можно прибегнуть к расширению c URL:
$c = curl_init('http://www.example.com/robots.txt');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);
А можно применить классHTTP_Request из PEAR:
require 'HTTP/Request.php';
$r = new HTTP_Request('http://www.example.com/robots.txt');
$r >sendRequest();
$page = $r->getResponseBody();
Для того чтобы получить доступ к защищенной странице, можно поместить имя пользователя и пароль в URL. В приведенном ниже примере имя пользователя – david, а пароль – hax0r. Покажем, как это сделать с помощью функции fopen():
$fh = fopen('http://david:hax0r@www.example.com/secrets.html','r')
or die($php_errormsg);
while (! feof($fh)) {
$page .= fread($fh,1048576);
}
fclose($fh);
Ниже показано, как это выполнить, применяя расширение c URL:
$c = curl_init('http://www.example.com/secrets.html');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_USERPWD, 'david:hax0r');
$page = curl_exec($c);
curl_close($c);
Теперь посмотрим, как это сделать с помощью класса HTTP_Request:
$r = new HTTP_Request('http://www.example.com/secrets.html');
$r->setBasicAuth('david','hax0r');
$r->sendRequest();
$page = $r->getResponseBody();
Функция fopen() следует переадресациям, определенным в заголовках ответа Location, а класс HTTP_Request этого не делает. Расширение c URL подчиняется им, только если установлен параметр CURLOPT_FOLLOWLOCATION:
$c = curl_init('http://www.example.com/directory');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
$page = curl_exec($c);
curl_close($c);
Расширение c URL может делать некоторые другие вещи с извлеченной страницей. Если установлен параметр CURLOPT_RETURNTRANSFER, то функция curl_exec() возвращает строку, содержащую полученную страницу:
$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
$page = curl_exec($c);
curl_close($c);
Для записи извлеченной страницы в файл откройте дескриптор файла на запись с помощью функции fopen() и установите для этого дескриптора файла параметр CURLOPT_FILE:
$fh = fopen('local-copy-of-files.html','w') or die($php_errormsg);
$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_FILE, $fh);
curl_exec($c);
curl_close($c);
Чтобы передать ресурсы c URL и содержимое полученной страницы в функцию, установите значение параметра CURLOPT_WRITEFUNCTION равным имени этой функции:
// сохраняем URL и содержимое страницы в базу данных
function save_page($c,$page) {
$info = curl_getinfo($c);
mysql_query("INSERT INTO pages (url,page) VALUES ('" .
mysql_escape_string($info['url']) . "', '" .
mysql_escape_string($page) . "')");
}
$c = curl_init('http://www.example.com/files.html');
curl_setopt($c, CURLOPT_WRITEFUNCTION, 'save_page');
curl_exec($c);
curl_close($c);
Если ни один из параметров CURLOPT_RETURNTRANSFER, CURLOPT_FILE или
CURLOPT_WRITEFUNCTION не установлен, то расширение c URL выводит содержимое возвращенной страницы.
Функция fopen() вместе с параметрами include и require может получать доступ к удаленным файлам, только если доступ к таковым разрешен. А по умолчанию он разрешен и управляется с помощью параметра настройки allow_url_fopen. Однако в Windows опции include и require
не дают возможности извлекать удаленные файлы в версиях PHP более
ранних, чем 4.3, даже если параметр allow_url_fopen установлен в on.