Эта тема на forum.dklab.ru


blazch: Перерезка контента
Как замутить ф-ю, которой в качестве параметра дается директория, в которой находится файлы(*.html и разные картинки
директория включает в себя еще множество вложенных папок), задается контент (вернее кусок кода который нужно заменить на другой кусок кода).
Код для всех html страниц одинаков, проблема с поиском самих html-ек и замена кода (ведь хорошо, если кусок кода маленький, но у меня-то он большой 50-60 строк сверху и чуть меньше снизу).
Я не прошу готовый скрипт, прошу лишь небольшой набросок.
Заранее благодарен.
P.S. Знаю что тема не нова, все моменты рассматривались ранее, но воедино по-моему никто не собирал.
Юрий Насретдинов:
blazch:

$find="something";
$replace="anything";
//**
$dh=opendir(".");
while($file=readdir($dh))
{
if($file=='.' || $file=='..' || is_dir($file)) continue;
$pathinfo=pathinfo($file);
if($pathinfo['extension']!='html' && $pathinfo['extension']!='htm') continue;
//**
$f=fopen($file,"rb");
$buf=fread($f,filesize($file));
fclose($f);
//**
$f=fopen($file,"wb+");
fwrite($f,str_replace($find,$replace,$buf));
fclose($f);
}

blazch:
Спасибо за код не совсем пригодился, но разобрался хоть с азами дерева.
Пробовал все бы хорошо, но наверное прийдется применить другой алгоритм, т.к. на пару символов они отличаются
(блин вот это геморой):
1. Удалять все строки подряд, начиная с начала файла, если в этой строке
нет определенной комбинации символов.
2. То же, только сначала находится строка, удовлетворяющая условиям а все строки далее удаляются.
3. В начало и конец добавляются строка1 и строка2 соответственно.
blazch:
А как?
blazch:
Мой каталог:
..
1
2
3
4
5
index.php
1.php
2.php

Однако приведенный код yUAC заменяет строки только в самом index.php и 1.php, 2.php.
А вот лазить по каталогам не хочет. И еще, давая в качестве переменных следующие строки

$find="include('http://www.venta-vlg.ru/template/header.php')";
$replace="include $_SERVER['DOCUMENT_ROOT'].'/template/header.php'";


скрипт давал ошибку:

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in p:\home\venta-vlg.ru\www\reviews\index.php on line 3

Вот весь скрипт:

<?php
$find="include('http://www.venta-vlg.ru/template/header.php')";
$replace="'include $_SERVER['DOCUMENT_ROOT'].'/template/header.php'";
$dh=opendir(".");
while($file=readdir($dh))
{
if($file=='.' || $file=='..' || is_dir($file)) continue;
$pathinfo=pathinfo($file);
if($pathinfo['extension']!='php') continue;
$f=fopen($file,"rb");
$buf=fread($f,filesize($file));
fclose($f);
$f=fopen($file,"wb+");
fwrite($f,str_replace($find,$replace,$buf));
fclose($f);
} ?>


Как быть?

P.S. В сообщении появился знак "&#41" - это мой глюк?
Gapter:
Вот функция для прохода всего дерева директорий. Рекурсивная. Возвращает массив с файлами (без директорий) с путями от указанной директории:


function getDirList ($dirName)
{
$d = opendir($dirName);
while($entry = readdir($d))
{
if ($entry != "." && $entry != "..")
{
if (is_dir($dirName."/".$entry))
{
$temp_ar = getDirList($dirName."/".$entry);
for ($t=0; $t<count($temp_ar); $t++)
{
$file_arr[] = $temp_ar[$t];
}
}
else
{
$file_arr[]=$dirName."/".$entry;
}
}
}
closedir($d);
return $file_arr;
}


Надеюсь, пригодится!
Юрий Насретдинов:
blazch:
Покажите файл, который был до и после обработки.

P.S. &#41 - это не Ваш глюк, а глюк системы подсвечивания ссылок
blazch:
Koд index.php я привел выше, а остальные файлы (внутри каталогов) имеют следующий вид:

<?php include('http://www.venta-vlg.ru/template/header.php');?>
Обзор цифровой камеры Canon Digital IXUS 400 (PowerShot S400)
<?php include('http://www.venta-vlg.ru/template/probel.php');?>
<table width="600" cellspacing="0" cellpadding="0">
<tr>
<td><hr>
<h3>Дизайн Canon Digital....

Или Вы просили что-то другое?
blazch:
Так выглядят практически все файлы, а после обработки показать не могу т.к. ничего не обработалось. Ах,да кроме самого себя index.php.
Юрий Насретдинов:
blazch:
У Вас одинарная кавычка в начале строки, на которую заменяется все...

А файлы внутри каталогов не обработались потому что я не писал алгоритм обхода всех папок и файлов :) . А функция для такого обхода лежит на несколько ссобщений выше
blazch:
Бился, бился и разбился...
Люди ну неужели ниукого нет готового решения?
После длительного решения получал еще большую гору ошибок, уже забил на скрипт начал вручную replace делать более 100 php-шек прошел, а их еще штук 300 по минимуму. Все горит…
Люди пожалейте!!!!!
P.S. Уважаемые модераторы не надо опять выговор делать, ну если человек туго догоняющий (в частности я), что ему и помощи попросить нельзя???
blazch:
И еще, где можно взять help по ф-ии pathinfo() выдаваемому ей массиву?
Ant:
И еще, где можно взять help по ф-ии pathinfo() выдаваемому ей массиву?
В мануале, вестимо. Есть тут такая тема, «Faq» называется. Сходите туда.
Юрий Насретдинов:
blazch:
http://www.php.net/pathinfo

Функция выдает элементы basename - имя файла, dirname - полное имя директории файла, extension - расширение файла
bæv:
начал вручную replace делать

В HomeSite есть "Расширенный поиск и замена" ('Extended Replace') -- по-моему, это как-раз то, что Вам нужно.

Эта тема на forum.dklab.ru