Удалить строку в файлах на PHP

Форум для тех кто начинает осваивать язык php.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Удалить строку в файлах на PHP

Сообщение vihtor » Ср авг 31, 2016 1:31 pm

Здравствуйте.
Необходимо удалить строку из html - кода во множестве файлов. Но файлы размещены во множестве папок. Т.е. имеется папка, где сотни вложенных папок с файлами.
Мне представляется скрипт на php, который удалит строку не только в файлах в корне папки, но и в файлах во множественных вложенных папках (извините за каламбур).
Необходимо удалить всё, что между тегами <body> и <h1>.
Т.е. имеется так:

Код: Выделить всё

<body>
Текст<h1>

Необходимо сделать так:

Код: Выделить всё

<body>
<
h1>


Отправлено спустя 9 минут 13 секунд:
Нет, наверное глупый вопрос. Ведь файлы с расширением html и кодировка win-1251.
Реклама
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Ср авг 31, 2016 2:46 pm

Код двух функций (ниже), вставьте в один php файл (utf-8), после <?php, залейте файл в корень сайта:

Код: Выделить всё

function scanner_file($dir)
{
    $list = array();
    if (is_dir($dir))
    {
        if ($handle = opendir($dir))
        {
            chdir($dir);
            while (false !== ($file = readdir($handle)))
            {
                if ($file != '.' && $file != '..')
                {
                    if (is_dir($file))
                    {
                        $subdir = scanner_file($file);
                        foreach ($subdir as $part)
                        {
                            $list[] = $dir . '/' . $part;
                        }
                    }
                    else
                    
{
                        if (preg_match('|\.html|', $file))
                        {
                            $list[] = $dir . '/' . $file;
                        }
                    }
                }
            }
            
            chdir
('../');
        }
        
        closedir
($handle);
    }
    
    return $list
;
}

function treatment_file($files)
{
    foreach ($files as $file)
    {
        $html = file_get_contents($file);
        if (preg_match('|<body>|', $html))
        {
            $html = preg_replace('|<body>(.*?)<h1>|isu', "<body>\n<h1>", $html);

            $fopen = fopen($file, 'w');
            $write = fwrite($fopen, $html);
            fclose($fopen);
        }
    }
}

Функция scanner_file - получает все файлы с расширением HTML в указанной папке, также получает и в подпапках.
Функция treatment_file - удаляет строку между тегами <body> и <h1>.

Запустить выполнение функций можно так:

Код: Выделить всё

$dir   = 'folder';
$files = scanner_file($dir);
treatment_file($files); 

Вместо folder - укажите основной каталог, где находятся все папки, подпапки и файлы, которые надо отредактировать.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Ср авг 31, 2016 6:42 pm

Нет, не получается у меня заставить работать скрипт.
Тестирую на Денвере.
Путь к файлам: c:/WebServers/home/localhost/www/111/ Вместо folder прописывал путь по разному.
При запуске скрипта в браузере ничего не показывается. Ошибок нет.
Денвер настроен на обработку html как php.

Если указать путь к файлам точкой (вместо folder прописать) то выдаёт ошибку на каждую папку, вот так:
Warning: file_get_contents(./znaniya-kak-kompanii-transformirovat/index.html) [function.file-get-contents]: failed to open stream: No such file or directory in Z:\home\localhost\www\111\s.php on line 48
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Ср авг 31, 2016 8:10 pm

Видимо не правильно прописан путь. Вот так: c:/WebServers/home/localhost/www/111/ писать не надо, надо просто написать название одной папки.

Я создаю папку file, где у меня для теста лежать в разных папках файлы с расширением html. Вызываю так:

Код: Выделить всё

$dir   = 'file';
$files = scanner_file($dir);
treatment_file($files);

И строка удаляется между <body> и <h1>, во всех файлах. Тестирую на сервере.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Ср авг 31, 2016 8:46 pm

Но я на Денвере тоже прописывал путь к папке: 111
А здесь на сервере. Запустите скрипт, ничего не происходит: _http://2test.netai.net/file/s.php

Отправлено спустя 6 минут 20 секунд:
_http://2test.netai.net/file/zaem-i-kredit-razve-eto-ne-odno-i-to/index.html

Код: Выделить всё

<body>
<
a href='../dengi/index.html'>Деньги</a>&nbsp;|| Заём и кредитразве это не одно и то 
же
?<h1

А надо (скрипт этого не делает):

Код: Выделить всё

<body>
<
h1
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Ср авг 31, 2016 8:53 pm

vihtor писал(а):ничего не происходит

Сценарий ни чего на экран не выводит. Что надо вывести на экран?
vihtor писал(а):/file/s.php

vihtor писал(а):/file/zaem-i-kredit-razve-eto-ne-odno-i-to/index.html

Что вставляете в функцию?
Что сообщает error_log?
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Ср авг 31, 2016 9:11 pm

Вставляю в функцию:

Код: Выделить всё

<?php
$dir   
'file';  

error_log нигде не нашёл. Это бесплатный 000webhost.com

Но и Денвер никаких ошибок не выводил.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Ср авг 31, 2016 9:24 pm

Из вашего поста я понял, что ваши файлы лежат в папке /file/zaem-i-kredit-razve-eto-ne-odno-i-to/, сценарий лежит в /file/. Значит писать надо так:

Код: Выделить всё

$dir   = 'zaem-i-kredit-razve-eto-ne-odno-i-to'

Во втором посте я написал, что сценарий надо заливать в корень сайта, а не в папку с файлами. Писать file, только в том случаи если сценарий находится в корне сайта, а папка file содержит файлы, которые надо отредактировать. Ни чего не происходит, потому что вы неверно указываете пут. Я трижды проверил, код работает.

Если нету еррор_лог включите дебаг: Поиск ошибок в PHP (Дебаг).
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Ср авг 31, 2016 9:40 pm

Папка /file/ загружена в корень сайта.
В папке /file/ несколько подпапок: /file/1/, /file/2/, /file/3/ ...
В каждой подпапке по одному файлу: /file/1/index.html, /file/2/index.html, /file/3/index.html ...

Запустил скрипт из корня сайта, он очистил все страницы, т.е. удалил весь html-код.

Отправлено спустя 34 минуты 8 секунд:
Воспользовался "Поиск ошибок в PHP (Дебаг)".
Проверил оба варианта и на сервере и на Денвере. Никаких ошибок нет.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Чт сен 01, 2016 1:28 am

Мы не там ищем проблему.
Скрипт папки сканирует, т.е. функция scanner_file работает.
Но скрипт не удаляет нужную строку, т.е. не работает функция treatment_file.
Может что-то не так в массиве: $html = preg_replace('|<body>(.*?)<h1>|isu', "<body>\n<h1>", $html);.
Что-то не так с регулярными выражениями?
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

Re: Удалить строку в файлах на PHP

Сообщение pessimist » Чт сен 01, 2016 1:46 am

Я конечно ничего в PHP не понимаю, но есть подозрение, что файл создается в режиме перезаписи, а запись не происходит. Т.е. функция fopen стирает существующий файл и создает новый.

Как можно проверить эту версию?

После вызова функции $write = fwrite($fopen, $html); Вставить строчку: echo $write; А еще интересно, что в переменной $html после записи. Можно вставить еще строчку echo $html;

Еще, для верности, я бы вот эту строчку:$fopen = fopen($file, 'w'); записал так: $fopen = fopen($file, 'wt');
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Чт сен 01, 2016 6:37 am

vihtor писал(а):Что-то не так с регулярными выражениями?

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

Стал думать, что вы опять пользуетесь неспособным хостингом: Re: Пакетная обработка HTML файлов (Пост vihtor #7185).
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Чт сен 01, 2016 10:01 am

Я всё сделал как рекомендовал pessimist . Ничего не изменилось. Единственно, что после запуска скрипта на экран вылазят нули (00000) по количеству файлов, где он полностью затер html-коды. Файлы пустые.

Насчёт дерьмового хостинга согласен. Но Денвер... Уж лучшего "хостинга" не найти.
А у вас, господин Администратор, скрипт работает потому, что все файлы в одной папке. Если бы у меня так было, то я и тему не создавал бы здесь.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

Re: Удалить строку в файлах на PHP

Сообщение Slash » Чт сен 01, 2016 10:11 am

vihtor писал(а):А у вас, господин Администратор, скрипт работает потому, что все файлы в одной папке.

Этот вывод сделан благодаря экстрасенсорным способностям? Я вроде по русски написал:
Slash писал(а):Я создаю папку file, где у меня для теста лежать в разных папках файлы с расширением html.

vihtor писал(а):Но Денвер... Уж лучшего "хостинга" не найти.

Ну, да. Тут не поспоришь. :lol:
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

Re: Удалить строку в файлах на PHP

Сообщение vihtor » Чт сен 01, 2016 11:05 am

Млин. Мне понравился один дизайн, я хочу сделать это на одном из сайтов. Но нужно отредактировать файлы. И вот встретилась эта идиотская папка, где все файлы (веб-страницы) расположены в отдельных подпапках. Ну, так, вычитал в Интернете, что бывалые вебмастера (я надеюсь) утверждают, что данная структура имеет массу преимуществ. Хотя я здесь не вижу никаких преимуществ. Ну, раз умные люди сказали, мы сделали. Сейчас вот мучаюсь. Неужели придется делать всё вручную...

О'кей. сейчас испытаю скрипт на платном хсстинге, хотя уверен будет тот же результат, что и на Денвере.

Вернуться в «PHP»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя