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>
Только потестируй перед использованием
цитата
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
Вот бесплатный скрипт Хренодера для этих целей, в инете я его не нашел поэтому выкладываю здесь. Надеюсь автор возражать не будет
Код:
Скрипт предназначен для поиска и замены одной подстроки на другую
во всех файлах определенной директории на сервере
(включая файлы во всех вложенных поддиректориях)
Которые понимаюь - легко сделают вариант с регулярными выражениями для себя.
---------- 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>
Только потестируй перед использованием
Ругается на отсутствие доступа к файлам
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
Поможайте плиз
скрипт что дал
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 фичи в пхп
Код:
<?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
ну это ж форум любителей чиваса
цитата
24/01/10 в 18:39
Sergeyka
ху из чивас?
в общем с меня причетается
Новая тема
Ответить
Эта страница в полной версии