Скрипт замены. Много файлов. - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.2486
BTC/USD68992.5646
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 10.11.2017, 13:09   #1
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
Question Скрипт замены. Много файлов.

Программист пропал куда-то, надеюсь временно. Есть задание. Похожее тз когда-то уже писал тут.

Есть 2 папки. Во первой лежит больше ляма файлов. Вроде все .html

Нужно зайти в каждый *.html файл и заменить уникалильный кусок кода (одна строчка):

</div><!--content-->

на код (много строк), который берется ПО ОЧЕРЕДИ и по КРУГУ со второй папки (лежит где-то 30к файлов. Внутри каждого кусок кода с разными ссылками.)

код будет типа такого (в каждом файле ссылки разные):

<a href="1.html">1</a>
<a href="2.html">2</a>
</div><!--content-->
lebaol вне форума  
Старый 10.11.2017, 15:52   #2
ogogoX
Senior Member
 
Аватар для ogogoX
 
Регистрация: 10.10.2011
Сообщений: 139
Бабло: $45615
По умолчанию

Бюджет есть?)
ogogoX вне форума  
Старый 10.11.2017, 17:16   #3
incognito
Senior Member
 
Аватар для incognito
 
Регистрация: 08.07.2007
Сообщений: 177
Бабло: $34565
По умолчанию

PHP код:
<?php
set_time_limit
(0);

$inDir '_in';
$replaceDir '_replace';
$resDir '_out';
$replaceDataArr $tmpArr glob($replaceDir.'/*.*');
$replaced '</div><!--content-->';

foreach (
glob($inDir.'/*.html') as $file) {
    
$data file_get_contents($file);
    
$dataReplace file_get_contents(array_shift($tmpArr));
    if (
count($tmpArr)==0$tmpArr $replaceDataArr;
    
$data str_replace($replaced,$dataReplace,$data);
    
file_put_contents(str_replace($inDir,$resDir,$file),$data);
}
не знаю так ли будет работать как вам надо и вообще
__________________
incognito вне форума  
Старый 10.11.2017, 19:30   #4
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от incognito Посмотреть сообщение
PHP код:
<?php
set_time_limit
(0);

$inDir '_in';
$replaceDir '_replace';
$resDir '_out';
$replaceDataArr $tmpArr glob($replaceDir.'/*.*');
$replaced '</div><!--content-->';

foreach (
glob($inDir.'/*.html') as $file) {
    
$data file_get_contents($file);
    
$dataReplace file_get_contents(array_shift($tmpArr));
    if (
count($tmpArr)==0$tmpArr $replaceDataArr;
    
$data str_replace($replaced,$dataReplace,$data);
    
file_put_contents(str_replace($inDir,$resDir,$file),$data);
}
не знаю так ли будет работать как вам надо и вообще
спасибо большое, сейчас тестану =)
lebaol вне форума  
Старый 10.11.2017, 20:51   #5
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
ТС -->
автор темы ТС По умолчанию

incognito, тестанул, спасибо.

просто удалило </div><!--content-->
и ничего не заменило =)
lebaol вне форума  
Старый 10.11.2017, 20:59   #6
incognito
Senior Member
 
Аватар для incognito
 
Регистрация: 08.07.2007
Сообщений: 177
Бабло: $34565
По умолчанию

$inDir = '_in'; -- директория где лежит миллион
$replaceDir = '_replace'; -- директория где фйалы с линками
$resDir = '_out'; -- замены на миллион(создать каталог перед запуском)
1 из миллиона
PHP код:
<!DOCTYPE html>
<
html lang="en">
<
head>
    <
meta charset="UTF-8">
    <
title>Title</title>
</
head>
<
body>
<
div>
</
div><!--content-->
</
body>
</
html
1 из 30тыс
PHP код:
<a href="1.html">1</a>
</
div><!--content--> 
на выходе
PHP код:
<!DOCTYPE html>
<
html lang="en">
<
head>
    <
meta charset="UTF-8">
    <
title>Title</title>
</
head>
<
body>
<
div>
<
a href="1.html">1</a>
</
div><!--content-->
</
body>
</
html
__________________
incognito вне форума  
Старый 10.11.2017, 21:16   #7
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от incognito Посмотреть сообщение
$inDir = '_in'; -- директория где лежит миллион
$replaceDir = '_replace'; -- директория где фйалы с линками
$resDir = '_out'; -- замены на миллион(создать каталог перед запуском)
1 из миллиона
PHP код:
<!DOCTYPE html>
<
html lang="en">
<
head>
    <
meta charset="UTF-8">
    <
title>Title</title>
</
head>
<
body>
<
div>
</
div><!--content-->
</
body>
</
html
1 из 30тыс
PHP код:
<a href="1.html">1</a>
</
div><!--content--> 
на выходе
PHP код:
<!DOCTYPE html>
<
html lang="en">
<
head>
    <
meta charset="UTF-8">
    <
title>Title</title>
</
head>
<
body>
<
div>
<
a href="1.html">1</a>
</
div><!--content-->
</
body>
</
html
при ваших данных - все ок, хм, спасибо большое, буду разбираться, в чем трабла =)
lebaol вне форума  
Старый 15.11.2017, 17:57   #8
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
ТС -->
автор темы ТС По умолчанию

при малом кол-стве файлов все супер, а так на сервере вибивает что-то типа такого:
"PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /directory/test.php on line 10"

или нужно весь скрипт переделывать, чтобы обрабатывало так много файлов?

спасибо =)
lebaol вне форума  
Старый 15.11.2017, 18:09   #9
веломан
сыроед
 
Аватар для веломан
 
Регистрация: 01.10.2015
Сообщений: 15,878
Бабло: $1862995
По умолчанию

http://php.net/manual/ru/ini.core.php#ini.memory-limit
в /etc/php5/cli/php.ini пропиши там 256MB или 512MB
веломан вне форума  
Старый 15.11.2017, 18:35   #10
lebaol
Member
 
Регистрация: 14.06.2015
Сообщений: 84
Бабло: $17870
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от веломан Посмотреть сообщение
http://php.net/manual/ru/ini.core.php#ini.memory-limit
в /etc/php5/cli/php.ini пропиши там 256MB или 512MB
прописал в /etc/php.ini 512M вместо 128M - и помогло, хотя уверен был, что не поможет.

спасибо вам большое!
lebaol вне форума