Я пишу скрипт для загрузки содержимого большой группы страниц, чтобы я мог применить к ним свой алгоритм подсчета очков.Мне удалось установить соединение и отправить HTTP-запрос, но я не получил никакого ответа, даже код состояния.
Вот мой код:
function getWebPage($host, $page, $fname = null)
{
// Open and connect the socket
$remotePort = getservbyname('www', 'tcp');
// $remotePort = $HTTPSPORT;
$ipaddr = isinteger($host) : $host ? gethostbyname($host);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
$errmsg = socket_strerror(socket_last_error());
echo "main file: couldn't get socket: $errmsg\n";
return false;
}
$result = socket_connect($socket, $ipaddr, $remotePort);
if ($result == false) {
$errmsg = socket_strerror(socket_last_error($socket));
echo "$host: connect failed: $errmsg\n";
return false;
}
// Send the request
$request = "GET $page HTTP/1.1\r\n";
$rc = socket_write($socket, $request, strlen($request));
// read the response
$response = "";
while (true) {
$s = socket_read($socket, 2048); <---------------------------------------------------------
if ($s === false) {
break;
}
$response = "$response$s";
}
}
Сценарийзависает при вызове socket_read, указанном <--------------------------------------------------------- </p>
Я озадачен.ISTM, что даже если у меня есть ошибка в моем запросе или если хост требует HTTPS, я должен по крайней мере получить код результата (200 будет успешным, и я проверю это).
ПРИМЕЧАНИЕ. Описаниефункции сокета утверждают, что вам нужно пересобрать PHP с --enable-sockets
при конфигурировании.Но я нашел extension=php_sockets.dll
закомментированный в php.ini, и я раскомментировал его.Затем скрипт выполнялся без сообщений об ошибках во время выполнения, но зависал на socket_read
, как описано выше.