121 lines
4.0 KiB
PHP
121 lines
4.0 KiB
PHP
|
<?php
|
|||
|
|
|||
|
/*****************************************************************
|
|||
|
Пример использования:
|
|||
|
|
|||
|
RemoteFile::setHeaders(array(
|
|||
|
'X-Requested-With: XMLHttpRequest',
|
|||
|
'Origin: http://vkontakte.ru',
|
|||
|
'Content-Type: application/x-www-form-urlencoded'
|
|||
|
));
|
|||
|
$headers = RemoteFile::getHeaders('http://cs4603.vkontakte.ru/u50132690/audio/432e2b109b94.mp3');
|
|||
|
$html = RemoteFile::getData('http://vkontakte.ru/audio', array(
|
|||
|
'act' =>'search',
|
|||
|
'q' => urlencode($this->_query)
|
|||
|
))
|
|||
|
*****************************************************************/
|
|||
|
|
|||
|
/**
|
|||
|
* Класс для работы с удаленными файлами
|
|||
|
* Реализован через библиотеку cURL
|
|||
|
*
|
|||
|
* @package classes
|
|||
|
* @author chez
|
|||
|
**/
|
|||
|
class RemoteFile {
|
|||
|
|
|||
|
private static $_timeout = 5; // Таймаут ответа от сервера
|
|||
|
private static $_headers = array(); // Заголовки для отправки на сервер
|
|||
|
|
|||
|
/**
|
|||
|
* Отправка запроса и получение ответа от сервера
|
|||
|
* Умеет возвращать текст ответа или заголовки
|
|||
|
*
|
|||
|
* @param string $url URL запроса
|
|||
|
* @param bool $headers Флаг: возвращать заголовки, а не текст
|
|||
|
* @param array $post_params Массив POST-параметров, если установлен, то метод меняется на POST
|
|||
|
* @return string Ответ от сервера
|
|||
|
* @author chez
|
|||
|
**/
|
|||
|
private static function _exec($url, $headers = false, $post_params = array()) {
|
|||
|
if (count($post_params) > 0) {
|
|||
|
$p = '';
|
|||
|
foreach ($post_params as $key => $val) {
|
|||
|
$p .= '&'. $key .'='. $val;
|
|||
|
}
|
|||
|
$post_params = substr($p, 1);
|
|||
|
}
|
|||
|
$ch = curl_init();
|
|||
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|||
|
curl_setopt($ch, CURLOPT_HTTPHEADER, self::$_headers);
|
|||
|
if ($headers) {
|
|||
|
curl_setopt($ch, CURLOPT_HEADER, 1);
|
|||
|
curl_setopt($ch, CURLOPT_NOBODY, 1);
|
|||
|
}
|
|||
|
if (is_string($post_params)) {
|
|||
|
curl_setopt($ch, CURLOPT_POST, 1);
|
|||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
|
|||
|
}
|
|||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
|||
|
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$_timeout);
|
|||
|
$result = curl_exec($ch);
|
|||
|
if (curl_errno($ch) !== 0) {
|
|||
|
curl_close($ch);
|
|||
|
return false;
|
|||
|
}
|
|||
|
curl_close($ch);
|
|||
|
return $result;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Получение HTTP-заголовков ответа от сервера
|
|||
|
*
|
|||
|
* @param string $url URL запроса
|
|||
|
* @param array $post_params Массив POST-параметров, если установлен, то метод меняется на POST
|
|||
|
* @return array Распарсеный массив заголовков
|
|||
|
* @author chez
|
|||
|
**/
|
|||
|
public static function getHeaders($url, $post_params = array()) {
|
|||
|
$headers = self::_exec($url, true);
|
|||
|
if ($headers === false) {
|
|||
|
return false;
|
|||
|
}
|
|||
|
$headers = explode("\r\n", $headers);
|
|||
|
$headers_array = array();
|
|||
|
|
|||
|
while(list($i, $header) = each($headers)) {
|
|||
|
if (substr($header, 0, 5) == 'HTTP/') {
|
|||
|
$header = explode(' ', $header);
|
|||
|
$headers_array['http'] = $header[1];
|
|||
|
} elseif ($header != '') {
|
|||
|
preg_match('/^([a-z0-9\-]*):\s(.*)$/Ui', $header, $m);
|
|||
|
$headers_array[strtolower(str_replace('-', '_', $m[1]))] = $m[2];
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return $headers_array;
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Получение ответа от сервера
|
|||
|
*
|
|||
|
* @param string $url URL запроса
|
|||
|
* @param array $post_params Массив POST-параметров, если установлен, то метод меняется на POST
|
|||
|
* @return string Тело ответа от сервера
|
|||
|
* @author chez
|
|||
|
**/
|
|||
|
public static function getData($url, $post_params = array()) {
|
|||
|
return self::_exec($url, false, $post_params);
|
|||
|
}
|
|||
|
|
|||
|
/**
|
|||
|
* Запись заголовков, которые будет отправлены вместе с запросом
|
|||
|
*
|
|||
|
* @param array $headers Индексный массив заголовков
|
|||
|
* @return void
|
|||
|
* @author chez
|
|||
|
**/
|
|||
|
public static function setHeaders($headers) {
|
|||
|
self::$_headers = $headers;
|
|||
|
}
|
|||
|
}
|