Comments 12
Велосипедисты такие велосипедисты. Я просто оставлю это здесь github.com/rmccue/Requests
хм, а че Guzzle не устроил? github.com/guzzle/guzzle
ну, php 5.5 же на дворе уже давно.
зачем городить глобальные HttpRequest, HttpRequestException, HttpURLConnection? Не говоря уже про SocketInterface.
зачем городить глобальные HttpRequest, HttpRequestException, HttpURLConnection? Не говоря уже про SocketInterface.
1. У вас в коде перемешаны русскоязычные англоязычные описания:
Логично их иметь на одном языке и предпочтительно английском.
То же самое относится и к исключениям:
2. Не стоит пихать несколько интерфейсов и классов в один файл. Лучше грузить их через autoloader или включать в заголовке. По этой же причине мне не нравится эта функция:
Вроде и все правильно, но есть ощущение хардкода
3. Класс Socket
Есть ощущение, что в большинстве случаев это не оптимальный выход. При редиректах внутри домена (как это чаще всего бывает) сокет закрывать незачем, это потеря времени и ресурсов.
/**
* Get status message of the response
*
* @return string message
*/
public function message()
{
return $this->getConnection()->getResponseMessage();
}
/**
* Добавляет параметры из объекта/массива $params к основному URL
*
* @param string $url
* @param array|object $params
* @return string
*/
private function append($url, $params)
{
return $url.(strpos($url, '?') === false ? '?' : '&').http_build_query($params);
}
Логично их иметь на одном языке и предпочтительно английском.
То же самое относится и к исключениям:
throw new HttpRequestException('Это не ссылка на файл');
2. Не стоит пихать несколько интерфейсов и классов в один файл. Лучше грузить их через autoloader или включать в заголовке. По этой же причине мне не нравится эта функция:
public static function create($url)
{
$basepath = dirname(__FILE__).DIRECTORY_SEPARATOR.'implements'.DIRECTORY_SEPARATOR;
// предпочтение отдается библиотеке CURL
if (extension_loaded('curl') && file_exists($basepath.'CURL.php'))
{
require_once $basepath.'CURL.php';
return new CURLInterface($url);
}
if (function_exists('fsockopen') && file_exists($basepath.'Socket.php'))
{
require_once $basepath.'Socket.php';
return new SocketInterface($url);
}
}
Вроде и все правильно, но есть ощущение хардкода
3. Класс Socket
if(is_resource($this->socket)) // при повторном обращении если follow_redirects
fclose($this->socket);
Есть ощущение, что в большинстве случаев это не оптимальный выход. При редиректах внутри домена (как это чаще всего бывает) сокет закрывать незачем, это потеря времени и ресурсов.
Спасибо за дельные замечания, обещаю перевести все комментарии.
По поводу 2 пункта, хотелось что бы файлов было как можно меньше для простоты использования, по поводу хардкода существует метод setConnectionFactory, который позволяет определять собственные реализации.
Если бы в PHP можно было использовать вложенные классы, код выглядел бы на порядок эстетичней.
По поводу 2 пункта, хотелось что бы файлов было как можно меньше для простоты использования, по поводу хардкода существует метод setConnectionFactory, который позволяет определять собственные реализации.
Если бы в PHP можно было использовать вложенные классы, код выглядел бы на порядок эстетичней.
При работе с курлом у вас закрывается дескриптор на каждый запрос?
Дескриптор закрывается, когда уничтожается экземпляр класса.
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".
Sign up to leave a comment.
HttpRequest — библиотека для простой работы с HTTP протоколом