首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP执行sed shell命令

PHP执行sed shell命令
EN

Stack Overflow用户
提问于 2016-10-13 06:50:38
回答 1查看 2.2K关注 0票数 0

我试图通过PHP执行sed shell命令,以更改文件中的一些字符串。该文件位于/etc/text.txt,我试图使用以下代码修改该文件中的一些文本:

代码语言:javascript
复制
$old_path = getcwd();
chdir('/etc/');
$cmd = "sed -i 's/footext/newtext/g' text.txt";
exec($cmd);
chdir($old_path);

但是text.txt的文本“足下文字”并没有改变。

请帮我解决这个问题

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-13 07:42:10

首先,我想重申允许您的(公共)web服务器更改系统文件的内在危险。这样做会导致攻击者危及您的系统,这只是一个时间问题。

也就是说,您的代码有几个问题。第一种方法是依赖外部第三方(shell)命令,这样就可以而且应该用纯PHP进行操作。

毕竟,编辑文本是PHP的主要优势之一,而且代码非常简单。举个例子..。

代码语言:javascript
复制
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/文件夹的权限。因此,为了使它能够在那里编辑文件,首先需要使用启用根的用户创建文件,然后将所有权更改为www-data

但是,在任何情况下都不要对此文件夹中的现有文件执行此操作。潜在的意外和灾难性的副作用实在是太大了!

如果您绝对需要让PHP脚本修改系统文件,那么编写一个shell脚本并通过crontab或类似的方法调用它。在您100%确定输入是100%安全不受滥用之后。(即:只可打印字符,最好是ASCII。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40014147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档