Задать вопрос
@modesden

Почему Ошибка сегментирования (сделан дамп памяти) при выполнении функции preg_match_all?

$array = scandir('damps');
        $f = fopen('dampFirm.sql', 'w');
        foreach($array as $file){
            if($file != '.' && $file != '..'){
                $content = file_get_contents('damps/' . $file);
                /*var_dump($content);
                die;*/
                $result = preg_match_all("/INSERT INTO(.|\n|\r)*\)\;/U",  $content, $inserts);
                var_dump($inserts[0]);
                die;
                if($result) {
                    foreach ($inserts[0] as $insert) {
                        $str = str_replace('` (`id`, ', '` (', $insert);
                        $str = preg_replace("/\(\d+, /", '(', $str) . "\n";
                        fwrite($f, $str);
                    }
                }
            }
        }
Вот код.
var_dump($content); Выдает а дальше не идет. Выдает Ошибка сегментирования (сделан дамп памяти). $content содержит ~ 100 000 строк. Подскажите пожалуйста в чем могет быть проблема. Спасибо.
  • Вопрос задан
  • 481 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
(.|\n|\r)*

Классика неверного использования регулярок. На достаточном размере строки ожидаемо выжирает стэк рекурсии и падает в сегфолт.

Нафиг вам тут вообще запоминание сдалось? Не вижу, чтобы дальше по коду вы его использовали. Чуток перепишу:
/INSERT INTO.+?\)\;/s
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@esvlad
Веб-разработчик
die псевдоним exit
exit - выводит сообщение и прекращает выполнение текущего скрипта
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы