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

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

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

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

vihtor писал(а):хотя уверен будет тот же результат

А я уверен, что случай повторяется, где вы мне доказывали, что мой сценарий не работает, а в конце обнаружилось, что вы сами делали совершенно не правильно.
Реклама
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

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

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

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

Я рекомендовал сделать три шага:

1) Передать параметр функции fopen вместо w написать wt
2) Вывести на экран состояние выполнения функции fwrite($fopen, $html); с помощью функции echo
3) Вывести на экран содержимое переменной $html

vihtor, если Вы сделали сразу все три шага, а на экране видите нули по числу файлов - это значит, что функция fwrite по каким-то причинам не отработала, то есть вернула 0 или FALSE.

Соответственно, если содержимое переменной $html не отразилось на экране браузера после вызова скрипта - значит не работает что-то в функции function treatment_file($files)

А Вы можете привести здесь тот код, который получился лично у Вас? Иногда какая-нибудь лишняя кавычка в коде может привести его в нерабочее состояние...
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

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

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

pessimist, а Вы не тестировали функции из второго поста темы?
Может они только у меня отрабатывают... Хотя если работают у меня, то должны работать и на других серверах.
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

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

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

Slash писал(а):pessimist, а Вы не тестировали функции из второго поста темы?
Может они только у меня отрабатывают... Хотя если работают у меня, то должны работать и на других серверах.

Нет, не тестировал. Для теста мне нужно создать кучу папок и файлов с лишним текстом между тегами :) И мне лень, каюсь :oops: !

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

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

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

Вот мой изначальный код скрипта:

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

<?php
$dir   
= 'folder';
$files = scanner_file($dir);
treatment_file($files);
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);
        }
    }
}

----------------------------
А это с рекомендациями pessimist:

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

<?php
$dir   
= 'folder';
$files = scanner_file($dir);
treatment_file($files);
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);
echo $html;
            $fopen = fopen($file, 'wt');
            $write = fwrite($fopen, $html);
            echo $write;
            fclose($fopen);
        }
    }
}


Отправлено спустя 28 минут 38 секунд:
Может вы попробуете отредактировать мои страницы? Может они какие-то особенные?
Там между тегами <body> и <h1> кроме текста ещё и ссылка и разные символы:
<body>
<a href='../dengi/index.html'>Деньги</a>&nbsp;|| Заём и кредит: разве это не одно и то же?<h1>

Может об эти символы спотыкается Скрипт.

_http://2test.netai.net/file/1/index.html
_http://2test.netai.net/file/2/index.html
_http://2test.netai.net/file/3/index.html
Аватара пользователя
pessimist
Сообщения: 47
Благодарил (а): 55 раз
Поблагодарили: 6 раз

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

Сообщение pessimist » Чт сен 01, 2016 12:25 pm

Коды сверил - совпадение с исходниками полное.

vihtor, давайте посмотрим, что же все-таки не работает, по шагам...

1) Проверим, удается ли функции file_get_contents получить контент изначального файла.

Для этого, сразу после строчки кода $html = file_get_contents($file); выведем состояние переменной $html с помощью функции echo, то есть после строки $html = file_get_contents($file); тоже вставим строку echo $html;

Если после запуска скрипта опять будут одни нули - это будет означать, что проблемы с содержимым переменной $file, а вот если весь Ваш экран заполнится кучей тегов и контента перепахиваемых страниц, значит в этой части все в порядке и можно смотреть, что происходит дальше.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

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

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

vihtor писал(а):Может об эти символы спотыкается Скрипт.

Да нет. Отработало нормально...
<meta charset="windows-1251" />

Блин, не знаю. Может дело в кодировке. Попробуйте, после строки:

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

        $html = file_get_contents($file); 

Добавить:

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

        $html = iconv('windows-1251', 'utf-8', $html); 

Кодировка файла сценария должна быть UTF-8 без BOM.
Аватара пользователя
vihtor
Сообщения: 112
Благодарил (а): 2 раза
Поблагодарили: 1 раз

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

Сообщение vihtor » Чт сен 01, 2016 12:48 pm

Отредактировал Скрипт по рекомендации pessimist. Запустил скрипт. На экране вижу свою страницу из первой паки в 2-х экземплярах и страницу из 2 папки в одном экземпляре.
Редактируемые же страницы все пустые, Скрипт затер все html-коды.

Отправлено спустя 16 минут 26 секунд:
Slash, да, это сработало.
Только теперь все файлы отображаются в неправильной кодировке. Но это не проблема, главное, что строка между тегами <body><h1> удаляется.
Аватара пользователя
Slash
Администратор
Сообщения: 2028
Поблагодарили: 62 раза

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

Сообщение Slash » Чт сен 01, 2016 1:13 pm

vihtor, я везде использую кодировку UTF-8 и рекомендую другим ее использовать. Надо еще заменить:

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

<meta charset="windows-1251" /> 

На:

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

<meta charset="utf-8" /> 

После этой строки:

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

        $html = iconv('windows-1251', 'utf-8', $html); 

Добавьте:

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

        $html = str_replace('<meta charset="windows-1251" />', '<meta charset="utf-8" />', $html); 

Или:

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

        $html = str_replace('windows-1251', 'utf-8', $html); 

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

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

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

Понял Вас, сейчас тестирую.

Отправлено спустя 11 минут 53 секунды:
Да, такой вариант скрипта работает прекрасно.
Строка между тегами </body> и </html> удаляется.
Кодировка в мета-теге меняется.

Но, что же теперь получается. Одна папка на сайте будет со страницами в кодировке utf-8, другие папки со страницами в кодировке windows-1251. Хотя поисковикам это до лампочки...

Отправлено спустя 1 час 19 минут 27 секунд:
Да-а, ценный Скрипт. Мигом отредактировал папку с индексным файлом и файлы в 1000 вложенных подпапок.
Благодарю за помощь.

------------------------------
Обнаружилась еще одна проблемная папка с файлами. Но здесь уже Тема раздута, позволю себе создать Новую Тему в этом же разделе форума: "Пакетная вставка тегов на PHP".

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

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

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