Php substr и обрезка

#php

#php

Вопрос:

Я хочу прочитать последнюю строку блока текста, например:

250-РАЗМЕР 31457280

250-CRAM ДЛЯ АВТОРИЗАЦИИ-MD5

250 ОК

Вот мой текущий код — он читает только первую строку:

 if (substr(trim($res), 0, 3) != "250") {
  

Предоставление выходных данных

250-РАЗМЕР 31457280

Я хочу получить последний

250 ОК

(между ними нет пустых строк, это моя проблема с копипастой). Есть идеи?

Комментарии:

1. Какой API вы используете для чтения этих данных? Возможно, вас заинтересует docs.php.net/fgets или docs.php.net/socket_read (с помощью PHP_NORMAL_READ), чтобы получить результат построчно.

Ответ №1:

Прав ли я, думая об этом $res = '250-SIZE 31457280 250-AUTH LOGIN CRAM-MD5 250 OK' ?

Если это так, то следующее должно служить вашей цели:

 $last_set = substr($res, (strlen(trim($res)) - 6), strlen(trim($res)));
  

Это приведет к выводу 250 OK .

Комментарии:

1. Да, это все еще должно работать — хотя я тестировал это только с использованием n литералов.

Ответ №2:

чтобы получить последние «250» из try

 $string="250-SIZE 31457280 250-AUTH LOGIN CRAM-MD5 250 OK"
echo substr($string, strlen($string)-6, 3)
  

Ответ №3:

вы могли бы разбить результат на » n» и взять последний элемент массива

 $arr = explode("n",$res);
$lastone = $arr[count($arr)-1];
  

замените linebreak, если отличается в вашей системе, но, по моему опыту, должно быть нормально

Ответ №4:

Если вы хотите знать, встречается ли в конце значение 250 OK, вы могли бы попробовать изменить местами как строку, которую вы ищете, так и строку, в которой вы выполняете поиск (иначе вам пришлось бы ввести look для KO 052, который трудно прочитать)

 if (strpos(strrev($res), strrev('250 OK')) === 0) // 0 since it should be at start, but not false
{
  ... do things
}