2016-01-05 52 views
-1

我在.php中發現了某個腳本,它會查找某些代碼的所有外觀(在我的情況下爲帶有<script>標記的javascript代碼),並在實時服務器上用其他內容代替它。找到服務器上的文件中的字符串,並將其替換爲

喜歡的東西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,且全部採用不同的路徑)。

感謝, 邁克爾!

+0

那不是爲改變'$ path_to_f容易ile'以適應服務器上存在的路徑? – developerwjk

+0

有90個文件需要此更改。我想避免手動進行。 – Michael

+1

如果你有root權限,我會使用'sed' ... – 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內部sed stringToReplace?我可以將它分配給像我的情況下從桌面變量,然後在sed中調用它? – Michael

+0

基本上讓我把這樣的:我試圖把這個字符串 「'<腳本類型=」 文/ JavaScript的 「SRC =」」 + f_url + '「>' + '<' + '/ SCRIPT>'); }'「裏面的變量,所以我可以在sed中使用它:'find/home/www -type f -print0 | xargs的-0 SED -i 'S/VARIABLE_GOES_HERE/replaced_with_this/g的'' – Michael

+0

我更新我的回答 - 記得用'sed',你需要逃脫它不喜歡的角色..'/'和'''是常見的 – Zak

相關問題