По умолчанию PHP не использует прокси.Чтобы обойти через прокси, вы можете добавить прокси для всех функций, используя http stream wrapper Docs (эта оболочка заботится о «именах файлов», начиная сhttp://
или https://
), как в вашем get_meta_tags
Документах Пример функции.
Существует множество HTTP-контекстаОпции Документы , то, что вы ищете, это proxy
.
Поскольку get_meta_tags
не принимает параметр контекста (только имя файлапараметр), вам нужно изменить так называемый контекст по умолчанию , который (обычно) используется функциями PHP, принимающими параметр имени файла.Устанавливается с stream_context_get_default
Документами .
$opts = array(
'http' => array(
'proxy' => 'tcp://127.0.0.1:8000'
)
);
stream_context_get_default($opts);
К сожалению get_meta_tags
выглядит как исключение из общего правила использования потокаобертки вообще (по крайней мере, с моей версией PHP 5.3.8).Но не беспокойтесь, вы можете перенести данные, из которых вы хотите получить метатеги, в get_meta_tags
, используя контекст по умолчанию.
Это можно сделать с помощью потоковой оболочки data://
Docs .Маленькая вспомогательная функция заботится о преобразовании:
/**
* obtain $filename content as data:// URI
*
* @link http://php.net/manual/en/wrappers.data.php
*
* @param string $filename
* @return string data:// URI
*/
function filename_data_uri($filename)
{
$buffer = file_get_contents($filename);
$mime = 'text/plain';
# obtain mime type and charset from http response (if available)
if (isset($http_response_header))
foreach($http_response_header as $header)
sscanf($header, 'Content-Type: %[^]]', $mime)
;
return "data://$mime;base64,".base64_encode($buffer);
};
Эта функция позволяет получать содержимое из URL с file_get_contents
, который использует контекст потока по умолчанию.Это тот, для которого был настроен прокси.
Затем вы можете объединить это с get_meta_tags
:
$url = 'http://www.espncricinfo.com/';
$url = filename_data_uri($url);
$meta_tags = get_meta_tags($url);
get_meta_tags
теперь работает с содержимым $url
, которое былоуже получены с помощью функции filename_data_uri
при использовании прокси.Полный пример:
$url = 'http://www.espncricinfo.com/';
$proxy = 'tcp://host:port';
// configure default context to use proxy
$opts['http']['proxy'] = $proxy;
$resource = stream_context_get_default($opts);
// obtain url contents with default context
$data = filename_data_uri($url);
$meta_tags = get_meta_tags($data);
print_r($meta_tags);
/**
* obtain $filename content as data:// URI
*
* @link http://php.net/manual/en/wrappers.data.php
*
* @param string $filename
* @return string data:// URI
*/
function filename_data_uri($filename)
{
$buffer = file_get_contents($filename);
$mime = 'text/plain';
# obtain mime type and charset from http response (if available)
if (isset($http_response_header))
foreach($http_response_header as $header)
sscanf($header, 'Content-Type: %[^]]', $mime)
;
return "data://$mime;base64,".base64_encode($buffer);
};