2016-01-05 5 views
-1

Я сделал некий скрипт в .php, который найдет все видимость определенного кода (в моем случае код javascript с тегами <script>) и заменит его на что-то еще на живом сервере.найти строку в файле на сервере и заменить ее

Нечто вроде grep -rnw '/path/to/somewhere/' -e "pattern".

Мой вопрос: как запустить скрипт .php на сервере, который будет искать все файлы на этом сервере для определенной строки, а затем заменить его на другую строку.

На моем рабочем столе я закодирован это, и она работала: `

<?php 
$what = <<<EOD 
<script>bla bla string</script> 
EOD; 
$with=" "; 
$path_to_file = '/Users/Michael/Desktop/results-prod.txt'; 
$file_contents = file_get_contents($path_to_file); 
$file_contents = str_replace($what,$with,$file_contents); 
file_put_contents($path_to_file,$file_contents); 
?> 

и теперь мне нужно что-то для живого сервера и всех файлов (более чем на 1 и все с использованием различных путей).

Thanks, Michael!

+0

не так просто, как изменение '$ path_to_f ile', чтобы соответствовать пути, который существует на сервере? – developerwjk

+0

есть 90 файлов, требующих этого изменения. Я бы хотел избежать этого вручную. – Michael

+1

Я бы использовал 'sed' для этого, если у вас есть разрешение на root ... – Zak

ответ

2
$FIND = "your mom"; 
$REPLACE = "your dad"; 

$DIR= "/path/to/dir"; 
$FILES = scandir($DIR); 
foreach($FILES as $FILE){ 
    if($FILE == "." || $FILE == "..") continue; 
    $PATH = "$DIR/$FILE"; 
    $file_contents = file_get_contents($PATH); 
    $file_contents = str_replace($FIND,$REPLACE,$file_contents); 
    file_put_contents($PATH,$file_contents); 
} 
+0

, но это работает, только если я дам ему прямой путь к папке, где находится файл. Я пробовал относительный путь, например '/ home/www /', и он не работал, но с '/ home/www/site/folder/michael' он сделал. – Michael

+0

'/ home/www /' не является относительным путем. более чем вероятно, у вас просто не было прав на редактирование этой папки с помощью PHP. –

+0

Привет, я думаю, что ваш скрипт не входит в папки. Это просто поиск файлов по пути, который мы ему даем. Я просто протестировал его. – Michael

1

из командной строки в Linux вы можете просто сделать это:

find /home/www -type f -print0 | xargs -0 sed -i 's/stringToReplace/replacementString/g' 

Более подробно

find /home/www -type f -print0 | xargs -0 sed -i s/'<script>[^)]*<\/script>'/'<script>Stuff To Replace With<\/script>'/g 

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

+0

и как я могу загрузить большой javascript внутри stringToReplace внутри sed? могу ли я назначить его переменной, как в моем случае, с рабочего стола, а затем вызвать ее в sed? – Michael

+0

в принципе позвольте мне сказать следующее: я пытаюсь поместить эту строку « '' внутри переменной, поэтому я могу использовать ее в sed, например: 'find/home/www -type f -print0 | xargs -0 sed -i 's/VARIABLE_GOES_HERE/replacement_with_this/g' ' – Michael

+0

Я обновил свой ответ - помните, что с' sed' вам нужно будет избежать символов, которые ему не нравятся ... '/' и '' ' являются общими – Zak

Смежные вопросы