簡體   English   中英

PHP執行sed shell命令

[英]PHP execute sed shell command

我試圖通過PHP執行sed shell命令以更改文件中的某些字符串。 該文件位於/etc/text.txt,我嘗試使用以下代碼修改該文件中的一些文本:

$old_path = getcwd();
chdir('/etc/');
$cmd = "sed -i 's/footext/newtext/g' text.txt";
exec($cmd);
chdir($old_path);

但是text.txt上的文本“ footext”不變。

請幫我解決這個問題

謝謝

首先,我想重申允許您的(公共)網絡服務器更改系統文件的固有危險。 這樣做導致攻擊者破壞您的系統,這僅是花費多少時間的問題。

也就是說,您的代碼有幾個問題。 首先是依靠外部第三方(shell)命令,而這些事情可以而且應該以純PHP代替。
畢竟,編輯文本是PHP的主要優勢之一,並且代碼非常簡單。 舉個例子...

if (!$content = file_get_contents ($filename)) {
    // Handle errors opening/reading the file here.
}

// Assuming case-sensitive search and replace here, as per the `sed` used.
$content = str_replace ("old text", "new text", $content);

if (!file_put_contents ($filename, $content)) {
    // Handle errors with writing to the file here.
}

這樣做的主要好處是您無需依賴無關的第三方程序(即使sed非常普遍)。 這使得代碼更容易理解,自包含,因此與平台無關(在最大程度上)。

至於為什么您的代碼無法正常工作,我也懷疑這與文件權限有關。 如注釋中所述,默認情況下, www-data用戶無權寫入/etc/文件夾。 因此,為了使其能夠在那里編輯文件,您首先需要使用具有root用戶權限的用戶創建文件,然后將所有權更改為www-data
但是, 不要在任何情況下這樣做是為了在此文件夾中已存在的文件。 意外的和災難性的副作用的潛力太大了!

如果您絕對需要PHP腳本來修改系統文件,請編寫shell腳本並通過crontab或類似方法調用它。 100%確定輸入內容不受濫用后100%安全。 (即:僅可打印字符,最好是ASCII。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM