2017-02-19 20 views
0

У меня есть тот же скрипт php preg_match, проверяющий тот же файл, на двух серверах linux они не приводятся одинаково (такая же версия php). Попытка проверить, есть ли сегодня лошади на моем местном пути. Я попробовал preg_last_error не обнаружил ошибки.preg_match работает на одном сервере, но не на другом

$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\">&nbsp;<\/p> --> 

    <h4 class=\"lightgreenbg padding\">/'; 
if (preg_match($pattern, $HTMLcontent)) { echo ("Found races today. <br>"); } else { echo ("No races found."); } 

The $ HTMLcontent можно найти один server1 и server2. Не уверен, что это проблема кодирования, php или ftp. Когда я FTP данные с сервера 1 на сервер 2, он также перестает работать на сервере 2. Но когда я загружаю его на свой компьютер, а затем FTP-сервер 2 работает нормально. Очень странно.

+1

Я предполагаю, что это связано с версией 'php'. Некоторое время назад у меня была аналогичная проблема. – math2001

+0

Возможно, это не связано с вашей реальной проблемой, но подумайте о том, чтобы использовать парсер вместо того, чтобы пытаться играть с регулярными выражениями в DOM. – Jan

+0

[Тот же файл, но не тот же контент.] (Https://i.stack.imgur.com/p9Z67.png) – revo

ответ

1

Это может быть связано с различием в окончаниях строк, если ваш сервер и рабочая станция используют разные операционные системы. Windows/Dos использует \r\n, тогда как linux использует только \n.

Вы можете решить эту проблему путем сопоставления любого пробела вместо точных пробельного - вы делаете это с помощью \s:

$pattern='/<p class=\"clear\" style=\"margin-top:-17px;\">&nbsp;<\/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"; 
} 
?> 

От: http://php.net/manual/en/function.strpos.php

+0

Да, это сработало. Я забыл о. Это определенно разница между linux и windows. Когда он был сохранен на моем ПК с Windows, он использовал другую новую строку, чем linux. Думал, что я схожу с ума. Спасибо! – Bill