Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > preg_match не работает с большими тестами


Автор: Dweep 20.3.2012, 20:43
Я в своих программах довольно часто использую следующую кострукцию 
preg_match('#(<a((?!</a>).)*)dozz</a>#i', $html)) 

где запись ((?!</a>).)*) означает любой набор символов, кроме последовательности </a>


Раньше все работало. 
Теперь переставил виндовс (с XP-32 перешел на XP-64 ) и переставил апач(сейчас стоит PHP Version 5.3.8, что стояло раньше - не помню).

В php.ini поставил pcre.backtrack_limit=10000000 и pcre.recursion_limit=10000000

На следующих входных данных:
Код

$html = '<a href=ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd>dozz</a>

';
echo strlen($html);33";
if (preg_match('#(<a((?!</a>|22222).)*)dozz</a>#i', $html)) {
    echo "+";

}  else {
    echo "-";

}




пример не работает. Браузер показывает что страница не найдена.  Если длина входной строки менее 317 символов - то работает коректно. Если более - то тоже не работает. 
Что и как мне настроить/переустановить, что б заработали подобные регулярные выражения в многочисленных файлах на моем компьютере ? 






 

Автор: skyboy 20.3.2012, 21:54
в error.log что?

Автор: Dweep 21.3.2012, 10:52
[Wed Mar 21 09:50:48 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:50:48 2012] [notice] Digest: done
[Wed Mar 21 09:50:48 2012] [notice] Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 configured -- resuming normal operations
[Wed Mar 21 09:50:48 2012] [notice] Server built: Sep 10 2011 11:34:11
[Wed Mar 21 09:50:48 2012] [notice] Parent: Created child process 3268
[Wed Mar 21 09:50:49 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:50:49 2012] [notice] Digest: done
[Wed Mar 21 09:50:49 2012] [notice] Child 3268: Child process is running
[Wed Mar 21 09:50:49 2012] [notice] Child 3268: Acquired the start mutex.
[Wed Mar 21 09:50:49 2012] [notice] Child 3268: Starting 150 worker threads.
[Wed Mar 21 09:50:49 2012] [notice] Child 3268: Starting thread to listen on port 443.
[Wed Mar 21 09:50:49 2012] [notice] Child 3268: Starting thread to listen on port 80.
[Wed Mar 21 09:50:58 2012] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Mar 21 09:50:58 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:50:58 2012] [notice] Digest: done
[Wed Mar 21 09:50:58 2012] [notice] Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 configured -- resuming normal operations
[Wed Mar 21 09:50:58 2012] [notice] Server built: Sep 10 2011 11:34:11
[Wed Mar 21 09:50:58 2012] [notice] Parent: Created child process 1912
[Wed Mar 21 09:50:59 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:50:59 2012] [notice] Digest: done
[Wed Mar 21 09:50:59 2012] [notice] Child 1912: Child process is running
[Wed Mar 21 09:50:59 2012] [notice] Child 1912: Acquired the start mutex.
[Wed Mar 21 09:50:59 2012] [notice] Child 1912: Starting 150 worker threads.
[Wed Mar 21 09:50:59 2012] [notice] Child 1912: Starting thread to listen on port 443.
[Wed Mar 21 09:50:59 2012] [notice] Child 1912: Starting thread to listen on port 80.
[Wed Mar 21 09:50:59 2012] [notice] Parent: child process exited with status 128 -- Restarting.
[Wed Mar 21 09:50:59 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:50:59 2012] [notice] Digest: done
[Wed Mar 21 09:50:59 2012] [notice] Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 configured -- resuming normal operations
[Wed Mar 21 09:50:59 2012] [notice] Server built: Sep 10 2011 11:34:11
[Wed Mar 21 09:50:59 2012] [notice] Parent: Created child process 4360
[Wed Mar 21 09:51:00 2012] [notice] Digest: generating secret for digest authentication ...
[Wed Mar 21 09:51:00 2012] [notice] Digest: done
[Wed Mar 21 09:51:00 2012] [notice] Child 4360: Child process is running
[Wed Mar 21 09:51:00 2012] [notice] Child 4360: Acquired the start mutex.
[Wed Mar 21 09:51:00 2012] [notice] Child 4360: Starting 150 worker threads.
[Wed Mar 21 09:51:00 2012] [notice] Child 4360: Starting thread to listen on port 443.
[Wed Mar 21 09:51:00 2012] [notice] Child 4360: Starting thread to listen on port 80.

Автор: skyboy 21.3.2012, 11:03
хм. может, это браузер так сообщает о том, что таймаут вышел?

Автор: Dweep 21.3.2012, 11:05
От момента запуска программы и до того как браузер сообщит что страница не найдена проходит пару секунд.
Тестировал на браузерах: хром, опера, фаерфокс.

В моем примере естть строчка  с некоректным синтаксисом: echo  strlen($html);33";     , текст 33";  в ней не нужен, я его по ошибке на форум свтавил.

Автор: Dweep 21.3.2012, 12:06
Установил xampplite-win32-1.7.3 ( до этогого стояло xampp-win32-1.7.7), заработало. Получается версии новые выпускают, а лучше не стает ( 

Автор: skyboy 21.3.2012, 12:55
странно.
если какая-то ошибка, то должны быть следы в error.log…  smile 

Автор: ksnk 21.3.2012, 13:06
Цитата(skyboy @  21.3.2012,  12:55 Найти цитируемый пост)
если какая-то ошибка, то должны быть следы в error.log…

Там и есть следы. Рестарт апача неоднократный  smile

Добавлено через 29 секунд
Цитата

Parent: child process exited with status 128 -- Restarting.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)