#php
#php
Вопрос:
Я хочу прочитать последнюю строку, которая равна 250, из команды Ehlo. В настоящее время он считывает первую строку, которая содержит 250 . Вот текущий код
fputs($socket, "EHLO server1.aa.comrn"); // ehlo command
$res = fgets($socket, 1024); // read output
if (substr(trim($res), 0, 3) != "250") {
Пожалуйста, помогите мне изменить код
Ответ №1:
Ожидаемый вами ответ выглядит следующим образом
250-foo
250-bar
250 OK
последняя строка отмечена не -
после трехзначного кода, а пробелом.
=> прочитайте все строки, содержащие 3-значный код, за которым следует что-то еще, кроме пробела.
function fetch_esmtp_response($source) {
$response = array();
do
{
$s = fgets($source, 1024);
$response[] = $s;
} while( strlen($s) > 3 amp;amp; ' '!==$s[3]);
return $response;
}
fputs($socket, "EHLO server1.aa.comrn"); // ehlo command
$response = fetch_esmtp_response($socket);
var_dump($response);
о, и кстати: если это не предназначено исключительно для образовательных целей, не кодируйте это самостоятельно, а используйте библиотеку электронной почты, например, Swiftmailer
Ответ №2:
Когда вы выполняете fgets()
(или что-либо еще) над сокетом, не гарантируется, что вы получите указанный объем данных. Что, я думаю, вам следует сделать, так это извлечь все данные в строковый буфер и анализировать этот буфер, пока не найдете нужные вам данные.