'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_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$_timeout); $r = curl_exec($ch); curl_close($ch); return $r; } /** * Получение HTTP-заголовков ответа от сервера * * @param string $url URL запроса * @param array $post_params Массив POST-параметров, если установлен, то метод меняется на POST * @return array Распарсеный массив заголовков * @author chez **/ public static function getHeaders($url, $post_params = array()) { $headers = explode("\r\n", self::_exec($url, true)); $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; } }