У меня один и тот же скрипт php preg_match, проверяющий один и тот же файл, на двух серверах linux они не отображаются одинаково (одинаковая версия php). Пытаюсь проверить, есть ли сегодня лошади на моем местном треке. Я пробовал preg_last_error не показывает ошибки.
$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\"> <\/p> -->
<h4 class=\"lightgreenbg padding\">/';
if (preg_match($pattern, $HTMLcontent)) { echo ("Found races today. <br>"); } else { echo ("No races found."); }
$ HTMLcontent можно найти один сервер1 а также server2. Не уверен, что это проблема кодирования, php или ftp. Когда я передаю данные по FTP с сервера 1 на сервер 2, он также перестает работать на сервере 2. Но когда я загружаю их на свой компьютер, а затем сервер FTP 2 работает нормально. Очень странно.
Это может быть связано с разницей в конце строки, если ваш сервер и рабочая станция используют разные операционные системы. Windows / Dos использует \r\n
тогда как Linux использует только \n
,
Вы можете решить эту проблему, сопоставляя любые пробелы, а не точные пробелы — вы делаете это с помощью \s
:
$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\"> <\/p> -->\s+<h4 class=\"lightgreenbg padding\">/';
Если это не конец строки, то вы на самом деле не ищете регулярное выражение, а просто строку. поэтому я бы сказал, что определенно не используйте preg_match, так как strpos намного эффективнее:
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Note our use of ===. Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
echo "The string '$findme' was not found in the string '$mystring'";
} else {
echo "The string '$findme' was found in the string '$mystring'";
echo " and exists at position $pos";
}
?>
Других решений пока нет …