在php中从shell_exec运行sed命令

在php中从shell_exec运行sed命令,php,sed,exec,Php,Sed,Exec,请帮帮我,因为我两天来一直在努力让它发挥作用 我有一个文本文件,其中包含用于定义用户名和密码的数组 $USERS['user'] = 'pass1'; 我正在尝试使用PHP来更改此密码 //name - call_pwd.php $commandline='./change_password ' . $_SESSION["logged"] . " " . $_POST["old_password"] . " " . $_POST["new_password"] $output = shell

请帮帮我,因为我两天来一直在努力让它发挥作用

我有一个文本文件,其中包含用于定义用户名和密码的数组

$USERS['user'] = 'pass1';
我正在尝试使用PHP来更改此密码

//name - call_pwd.php
$commandline='./change_password ' . $_SESSION["logged"] . " " . $_POST["old_password"] . " " . $_POST["new_password"] 
$output = shell_exec("$commandline");
这是我用来更改密码的bash文件。因为我不擅长它,所以我不得不使用很多变量来简化它

#!/bin/bash
#name - change_password
username=`echo "$1"`
old_password=`echo "$2"`
new_password=`echo "$3"`
old_string=`echo "\['$username'\] = '$old_password'"`
new_string=`echo "['$username'] = '$new_password'"`
sed -i "s/${old_string}/${new_string}/" passwords.php
if [ "$?" == 0 ]
then
echo "Password changed Successfully."
else
echo "Could not change password, try again."
fi
当我从root提示符运行这个脚本时,它工作正常,并更改了密码。但从PHP来看,这是行不通的。它不断给我信息“无法更改密码,请重试。”

当我读到“and”时,如果您想将sed与php一起使用,就需要对其进行转义

sed -i \"s/${old_string}/${new_string}/\" passwords.php
sed -i \""s/${old_string}/${new_string}/\"" passwords.php
passwords.php上的权限是所有用户的完全权限。 我也尝试过在任何地方放置绝对路径,但也没有效果

当我回显$commandline$old_字符串和$new_字符串时,call_pwd.php上的$output变量就会显示出来

更改密码用户密码1密码2

\['user'\] = 'pass1'
['user'] = 'pass2'
Could not change password, try again. 
请帮帮我,谢谢。
为这么长的帖子道歉。

你为什么要这样做?你可以在PHP中使用
[un]serialize()
文件内容()


我不会对这样做的安全影响发表任何评论,但是如果您想在已经使用PHP的情况下简单地更改文本文件中的某些值,为什么不直接使用PHP?

顺便说一句:这似乎非常不安全。如果您不检查就直接在命令行中执行用户输入,可能会有人从根本上损害您的系统。另外:在这样敏感的情况下,请不要使用“所有用户的完整权限”!我已经测试了您的脚本,但提供了完整路径。您可以尝试使用脚本的完整路径吗?我也尝试了完整路径,但我的sed命令不起作用,您可以指定您到底更改了什么吗?为什么不使用?将
新密码设置为哈哈| rm-rf/*“笑啊笑啊
$ php -r '
    $USERS = [ "user" => "pass1" ];
    file_put_contents("passwords.php", serialize($USERS));'
$ cat passwords.php; 
a:1:{s:4:"user";s:5:"pass1";}
$ php -r '
    $USERS = unserialize(file_get_contents("passwords.php"));
    $USERS["user"] = "newpass";
    file_put_contents("passwords.php", serialize($USERS));'
$ cat passwords.php
a:1:{s:4:"user";s:7:"newpass";}