Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: Скриптоманьяки Помажите?
цитата
17/01/10 в 07:07
 Sergeyka
Требуется скрипт, залив на хост который и прописав определенный хтмл код в нем - нажав на кнопку - произошла бы вставка перед тегом </header> этого кода во всех файлах html и htm находящихся на домене, при чем в папках и саб папках (/ + ппапка/ + /папка/папка).

Скока такое стоить будет?
цитата
17/01/10 в 08:28
 samedi
Что-то вроде такого

Код:
<?php

/**
*
*
*/
     
function process($file, $before, $insert) {
    if (is_file($file)) {
        $path_parts = pathinfo($file);
        if ($path_parts['extension'] == "html" || $path_parts['extension'] == "htm") {
            echo "~ $file<br>";
            $file_content = file_get_contents($file);
            $file_content = str_replace($before, $insert.$before, $file_content);
            file_put_contents($file, $file_content);
        }
        return;
    } else if (is_dir($file)) {
        $scan = glob(rtrim($file,'/').'/*');
        foreach($scan as $index => $path) {
            process($path, $before, $insert);
        }
        return;
    }
}

if (@$_POST['dir'] && @$_POST['before']) {
    process($_POST['dir'], $_POST['before'], $_POST['insert']);
    die("done");
}

?>

<form method="post">
    <table>
        <tr>
            <td>Directory</td>
            <td>
                <select name="dir">
                    <?php foreach (scandir(".") as $file): if (is_dir($file)): ?>
                        <option value="<?=$file?>"><?=$file?></option>
                    <?php endif; endforeach; ?>
                </select>
            </td>
   </tr>
        <tr>
            <td>Before</td>
            <td><input type="text" name="before"></td>
   </tr>
        <tr>
            <td>Insert</td>
            <td><input type="text" name="insert"></td>
   </tr>
        <tr>
            <td></td>
            <td><input type="submit" name="submit"></td>
   </tr>
    </table>
</form>


Только потестируй перед использованием icon_smile.gif
цитата
17/01/10 в 10:18
 Swimmer24
FTP: закачать определенные файлы из разных папок
посмотри тут, похоже это то, что тебе надо
цитата
17/01/10 в 13:00
 Sergeyka
да нет, малость не то.

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

И нужна вставка кода именно перед закрытием тега </header> т.е. в низу страницы
цитата
17/01/10 в 13:02
 Sergeyka
samedi: спасибо!
попробую заюзать
цитата
17/01/10 в 15:47
 Vlad_S
Вот бесплатный скрипт Хренодера для этих целей, в инете я его не нашел поэтому выкладываю здесь. Надеюсь автор возражать не будет icon_smile.gif
Код:
Скрипт предназначен для поиска и замены одной подстроки на другую
во всех файлах определенной директории на сервере
(включая файлы во всех вложенных поддиректориях)

Которые понимаюь - легко сделают вариант с регулярными выражениями для себя.

---------- sr.php - начало цитаты ---------

<?
$work_dir="./";       
// рабочая директория - обязательно должна заканчиваться
// символом "/"

$excl_dir=array();
$excl_dir[0]="./no_work_here/";       
$excl_dir[1]="./and_here/and_here/";

// директории, где поиск/замена не производятся - обязательно должны заканчиваться
// символом "/"


$file_mask_1=".html";   
$file_mask_2=".js";
// маски обрабатываемых файлов (будут обработаны все файлы,
// содержащие данную строку в имени)

$search_str="test";   #что ищем
$replace_str="TEST";   #чем заменяем

//******************************************************

$level=0;

function sr($dir)
{
global $level,$file_mask_1,$file_mask_2,$search_str,$replace_str,$excl_dir;
echo "<b>";
for ($i=0;$i<$level;$i++) echo "* * ";
echo $dir."</b>";

if (@in_array($dir,$excl_dir))
{
echo " - needn't search & replace<br>";
return;
}

echo "<br>";

$p = dir($dir);
while($ent=$p->read())
{
if ($ent!="." && $ent!=".." && !is_dir($dir . $ent) && (eregi(sql_regcase($file_mask_1),$ent) || eregi(sql_regcase($file_mask_2),$ent)))
{
$tmp=@file($dir.$ent);
$str=@implode("",$tmp);

if (strpos("@!#%xrenoder^&*()".$str,$search_str))
{
for ($i=0;$i<($level)+1;$i++) echo "* * ";
echo $dir.$ent." found...";

$str=str_replace($search_str,$replace_str,$str);

if ($fp=@fopen($dir.$ent, "w"))
{
flock($fp,LOCK_EX);    
fwrite($fp,$str);
fclose($fp);
echo " and replace<br>";
}
else echo " and <b>can't replace</b><br>";
}

}
elseif($ent!="." and $ent!=".." and is_dir($dir . $ent))
{
$level++;
sr($dir.$ent."/");
$level--;
}
}
$p->close();

return;
}

sr($work_dir);

echo "SEARCH & REPLACE Complete";

?>

---------- sr.php - конец цитаты ---------
цитата
17/01/10 в 16:16
 Sergeyka
ну маньяки мои золотые, прикинте, у меня на домене 1000 папок в которых есть файлы и субпапки!

я скрипт должен в каждую папку заливать?

мне нужно чтобы скрипт сам обошел все папки и сделал изменение файлов.

в идеале залил скрипт в корень домена, запустил, и пошел спать.

готов заплатить
цитата
17/01/10 в 16:31
 Kobalt
скрипт Хренодера - точно под твою задачу

Цитата:
Скрипт предназначен для поиска и замены одной подстроки на другую
во всех файлах определенной директории на сервере
(включая файлы во всех вложенных поддиректориях)
цитата
17/01/10 в 23:24
 samedi
Sergeyka писал:
я скрипт должен в каждую папку заливать?


нет. выбрать в списке Directory точку (выбрано по умолчанию) - это и будет замена во всех вложенных папках относительно текущей (со скриптом).
цитата
18/01/10 в 01:17
 Sergeyka
спасибо!
все + 8
цитата
22/01/10 в 16:45
 Sergeyka
samedi писал:
Что-то вроде такого
Код:
<?php
/**
*
*
*/
     
function process($file, $before, $insert) {
    if (is_file($file)) {
        $path_parts = pathinfo($file);
        if ($path_parts['extension'] == "html" || $path_parts['extension'] == "htm") {
            echo "~ $file<br>";
            $file_content = file_get_contents($file);
            $file_content = str_replace($before, $insert.$before, $file_content);
            file_put_contents($file, $file_content);
        }
        return;
    } else if (is_dir($file)) {
        $scan = glob(rtrim($file,'/').'/*');
        foreach($scan as $index => $path) {
            process($path, $before, $insert);
        }
        return;
    }
}
if (@$_POST['dir'] && @$_POST['before']) {
    process($_POST['dir'], $_POST['before'], $_POST['insert']);
    die("done");
}
?>
<form method="post">
    <table>
        <tr>
            <td>Directory</td>
            <td>
                <select name="dir">
                    <?php foreach (scandir(".") as $file): if (is_dir($file)): ?>
                        <option value="<?=$file?>"><?=$file?></option>
                    <?php endif; endforeach; ?>
                </select>
            </td>
   </tr>
        <tr>
            <td>Before</td>
            <td><input type="text" name="before"></td>
   </tr>
        <tr>
            <td>Insert</td>
            <td><input type="text" name="insert"></td>
   </tr>
        <tr>
            <td></td>
            <td><input type="submit" name="submit"></td>
   </tr>
    </table>
</form>

Только потестируй перед использованием icon_smile.gif


Ругается на отсутствие доступа к файлам
Permission denied in skript-zamena.php on line 15
done

нужно всем файлам присвоить атрибуты 777

Присвоил - заменило

Но вот как массово на серваке, где более 1000 файлов поменять сразу атрибуты?
цитата
22/01/10 в 17:01
 Guest
Sergeyka писал:

Но вот как массово на серваке, где более 1000 файлов поменять сразу атрибуты?

скорее всего твои фтп и пхп юзвери разные
и пхпшный сменить атребуты не сможет, шелом пробовать надо
цитата
22/01/10 в 17:05
 Stek
Цитата:
Но вот как массово на серваке, где более 1000 файлов поменять сразу атрибуты?

ssh есть ?

cd /www/domain.com/html
chmod -R *.html 0666

Если ssh нет, то фтп клиент FlashFXP умеет рекурсивно менять права на файлы и директории.
цитата
23/01/10 в 14:45
 Sergeyka
попробую через сапорт дедика сделать, может помогут
цитата
23/01/10 в 16:52
 samedi
Код:
<?php
     
function process($file, $before, $insert) {
    if (is_file($file)) {
        $path_parts = pathinfo($file);
        if ($path_parts['extension'] == "html" || $path_parts['extension'] == "htm") {
            echo "~ $file\n";
            $file_content = file_get_contents($file);
            $file_content = str_replace($before, $insert.$before, $file_content);
            file_put_contents($file, $file_content);
        }
        return;
    } else if (is_dir($file)) {
        $scan = glob(rtrim($file,'/').'/*');
        foreach($scan as $index => $path) {
            process($path, $before, $insert);
        }
        return;
    }
}

process(".", "</header>", "sergeyka");


Сохраняешь в replace.php, потом запускаешь под рутом.

Код:
php replace.php
цитата
23/01/10 в 16:55
 Sergeyka
Поможайте плиз icon_smile.gif скрипт что дал
samedi: работает, но вот в хтмл файлы вставляет код через попу, на выходе имеем вот такую хрень

<a href=\"http://domain.com/\" title=\"TITLE\" class=\"style1\">Porn Blog</a>


это можно как нибудь исправить?
цитата
23/01/10 в 17:24
 Ronald Wild
Попробуй в скрипте прописать Код:
set_magic_quotes_runtime(0);
первой строчкой или в пхп.ини magic_quotes_runtime=off
цитата
23/01/10 в 21:22
 samedi
Цитата:
это можно как нибудь исправить?

отключить deprecated фичи в пхп icon_smile.gif

Код:
<?php

if (get_magic_quotes_gpc()) {
    $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list($key, $val) = each($process)) {
        foreach ($val as $k => $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}
     
function process($file, $before, $insert) {
    if (is_file($file)) {
        $path_parts = pathinfo($file);
        if ($path_parts['extension'] == "html" || $path_parts['extension'] == "htm") {
            echo "~ $file<br>";
            $file_content = file_get_contents($file);
            $file_content = str_replace($before, $insert.$before, $file_content);
            file_put_contents($file, $file_content);
        }
        return;
    } else if (is_dir($file)) {
        $scan = glob(rtrim($file,'/').'/*');
        foreach($scan as $index => $path) {
            process($path, $before, $insert);
        }
        return;
    }
}

if (@$_POST['dir'] && @$_POST['before']) {
    process($_POST['dir'], $_POST['before'], $_POST['insert']);
    die("done");
}
?>


<form method="post">
    <table>
        <tr>
            <td>Directory</td>
            <td>
                <select name="dir">
                    <?php foreach (scandir(".") as $file): if (is_dir($file)): ?>
                        <option value="<?=$file?>"><?=$file?></option>
                    <?php endif; endforeach; ?>
                </select>
            </td>
        </tr>
        <tr>
            <td>Before</td>
            <td><input type="text" name="before"></td>
        </tr>
        <tr>
            <td>Insert</td>
            <td><input type="text" name="insert"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" name="submit"></td>
        </tr>
    </table>
</form>
цитата
24/01/10 в 09:34
 Sergeyka
samedi: большое спасибо!
я тебе че нить должен?
цитата
24/01/10 в 14:52
 samedi
ну это ж форум любителей чиваса smail101.gif
цитата
24/01/10 в 18:39
 Sergeyka
ху из чивас?
в общем с меня причетается icon_smile.gif


Эта страница в полной версии