Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: preg_replace() сбрасывает соединение

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: проблемы с регулярками
ugin_root
Отправлено: 31 Января, 2012 - 05:28:40
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




итак есть задача сделать таблички на "форум", кому-то очень понравились таблички как в вики и решено было делать их. Итак код работает, но регулярка сбрасывает соединение когда в этой "табличке" много записей

PHP:
скопировать код в буфер обмена
  1. function tableTr($s){
  2.         return '<tr>'.preg_replace(
  3.                 '/([\|\^]?)(?<=([\|\^]))([^\|\^]+)([\|\^]+)/Usie',
  4.                
  5.                 "'<'.(substr('$1$2',0,1)=='|'?'td':'th').(strlen('$4')===1?'':' colspan=\"'.strlen('$4').'\"').'>
  6.                         $3
  7.                 </'.(substr('$1$2',0,1)=='|'?'td':'th').'>'",$s[2]).'</tr>';
  8. }
  9. $str = "
  10. ^Заголовок1^Заголовок2^Заголовок3^
  11. |ячейка1|ячейка2|ячейка3|
  12.  
  13. ";
  14. $str=preg_replace('/(?<=[^\|\^][\n\r]|^)([|^](([^\r\n]|[|^][\r\n]+[|^])*)[|^])(?=[\n\r]+[^\|\^]|$)/usi','<table>$1</table>',$str);
  15. $str=preg_replace_callback('/(?<=[\n\r]|(\<table\>))([\|\^][^\r\n]+[\|\^])(?=[\r\n]|(\<\/table\>))/usi',"tableTr",$str);
  16. echo $str;
  17.  

и этот код выполняется! но если повторить строку "|ячейка1|ячейка2|ячейка3|" скажем 100 раз то например хром выдаёт вот такую строчку:
Ошибка 101 (net::ERR_CONNECTION_RESET): Соединение сброшено.

т.е. у меня проблема с большими таблицами. облазил весь гугл, ничего похожего найти не смог, может кто-то сталкивался?

в коде используется preg_replace_callback, но если сделать тоже самое в preg_replace с модификатором 'e' проблема остаётся

з.ы. файл сохранять в utf-8 иначе ячейки на русском станут пустыми.
 
 Top
snikers987
Отправлено: 31 Января, 2012 - 08:57:29
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




ничего регулярка не сбрасывает, скорее всего это таймаут соединения из-за продолжительной работы скрипта.

(Отредактировано автором: 31 Января, 2012 - 09:01:16)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
ugin_root
Отправлено: 31 Января, 2012 - 09:40:43
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




и в правду, на сервере всё работатет.... а на локале если делаю 20 записей сбрасывает, непонятно в чём дело, хотя скажем цикл(1000) с десятью записями обрабатывается мгоновенно.
 
 Top
Infelix
Отправлено: 31 Января, 2012 - 09:43:31
Post Id


Новичок


Покинул форум
Сообщений всего: 10
Дата рег-ции: Янв. 2012  
Откуда: Благовещенск


Помог: 0 раз(а)




потому что работа со строкам (а особенно с регулярками) намного более ресурсоемкая чем прогон 1000 итераций цикла


-----
http://infelix[dot]ru - заметки о ExtJS, Zend Framework, SEO...
 
 Top
ugin_root
Отправлено: 31 Января, 2012 - 09:57:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 134
Дата рег-ции: Май 2011  
Откуда: Киргизия


Помог: 5 раз(а)




Infelix
если учесть что сервер от моего компа отличается тем что на нём freeBSD которая стоит там с 2002 года, там третий пень а не i3 как у меня и 2 гига оперативы против моих 8... То дело точно не в производительности.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. function tableTr($s){
  4.         return '<tr>'.preg_replace('/([\|\^]?)(?<=([\|\^]))([^\|\^]+)([\|\^]+)/Usie',"'<'.(substr('$1$2',0,1)=='|'?'td':'th').(strlen('$4')===1?'':' colspan=\"'.strlen('$4').'\"').'>$3</'.(substr('$1$2',0,1)=='|'?'td':'th').'>'",$s[2]).'</tr>';
  5. }
  6. $str = "
  7.  
  8. ^Заголовок1^Заголовок2^Заголовок3^
  9. |ячейка1|ячейка2|ячейка3|
  10. |ячейка1|ячейка2|ячейка3|
  11. |ячейка1|ячейка2|ячейка3|
  12. |ячейка1|ячейка2|ячейка3|
  13. |ячейка1|ячейка2|ячейка3|
  14. |ячейка1|ячейка2|ячейка3|
  15. |ячейка1|ячейка2|ячейка3|
  16. |ячейка1|ячейка2|ячейка3|
  17. |ячейка1|ячейка2|ячейка3|
  18. |ячейка1|ячейка2|ячейка3|
  19. |ячейка1|ячейка2|ячейка3|
  20. |ячейка1|ячейка2|ячейка3|
  21.  
  22. ";
  23. function GetTime(){$m=explode(' ',microtime());return $m[1]+$m[0];}
  24. $tstart = GetTime();
  25. $str=preg_replace('/(?<=[^\|\^][\n\r]|^)([|^](([^\r\n]|[|^][\r\n]+[|^])*)[|^])(?=[\n\r]+[^\|\^]|$)/usi','<table>$1</table>',$str);
  26. $str=preg_replace_callback('/(?<=[\n\r]|(\<table\>))([\|\^][^\r\n]+[\|\^])(?=[\r\n]|(\<\/table\>))/usi',"tableTr",$str);
  27.  
  28. echo $str;
  29.  
  30. echo 'Время выполнения: ' . (GetTime() - $tstart) . ' сек.';


CODE (text):
скопировать код в буфер обмена
  1.  
  2.  
  3. <table><tr><th>Заголовок1</th><th>Заголовок2</th><th>Заголовок3</th></tr>
  4. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  5. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  6. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  7. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  8. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  9. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  10. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  11. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  12. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  13. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  14. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr>
  15. <tr><td>ячейка1</td><td>ячейка2</td><td>ячейка3</td></tr></table>
  16.  
  17. Время выполнения: 0.0019629001617432 сек.


если добавляю ещё одну строку то соединение сбрасывается на локальном компе... странно
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB