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

Как ускорить PHP скрипт?

Есть скрипт. На вход получает html файл. Задача скрипта каждому задать data-name="tag-НОМЕР", где НОМЕР - номер тега от начала страницы. Пример body такого html файла:
<p class="about">Текст</p>
<p>Другой текст</p>
<a href="">Ссылка</a>
<p>Ещё текст</p>

После выполнения скрипта должно получиться так:
<p data-name="tag-1" class="about">Текст</p>
<p data-name="tag-2">Другой текст</p>
<a href="">Ссылка</a>
<p data-name="tag-3">Ещё текст</p>


Для реализации поставленной задачи я набросал такой код:
<?php
$html = file_get_contents('index.html');
$bodytag = $html;

// подсчитываем количество таких тегов
$count_p_tag = substr_count($html, "<p");

for($i=1; $i<$count_p_tag+1; $i++) {
	$replace_counter = $i;
	$bodytag = preg_replace ('/<p/ie',"\$replace_counter--==1?\"<p data-namel=\\\"p-tag-$replace_counter\\\"\":'\\0'",$bodytag);
}

// записываем получившийся результат
$fp = fopen("index.html", "w+");
$mytext = "$bodytag";
$test = fwrite($fp, $mytext);
fclose($fp);
?>


Подскажите пожалуйста, как можно его ускорить? Если таких тегов 10 000 - 20 000, то скрипт выполняет свою задачу неприемлемо долго (более 30 секунд).
Заранее спасибо
  • Вопрос задан
  • 313 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
@r_zaycev
$html = file_get_contents('index.html');
$i = 0;
$html = preg_replace_callback(
	'/<p/i',
	function() {
		global $i;
		$i++;

		return "<p data-name=\"{$i}\"";
	},
	$html
);

file_put_contents('index-out.html', $html);

// Finished in 0.1s

Проверял на тексте с 11К тегов <dd> из текста 1 тома "Войны и Мира" az.lib.ru/t/tolstoj_lew_nikolaewich/text_0040.shtml
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@heahoh
Full stackoverflow developer
Не использовать preg_replace
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
27 дек. 2024, в 17:43
500 руб./за проект
27 дек. 2024, в 17:36
2000 руб./за проект
27 дек. 2024, в 17:34
1500 руб./за проект