请帮助我,因为我一直试图让它工作两天。
我有一个文本文件,其中包含用于定义用户名和密码的数组。
$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
当我从根提示符运行此脚本时,它可以正常工作并更改密码。但是从PHP开始它将不起作用。它不断给我留言“无法更改密码,请再试一次。”
当我读“和'需要转义如果你想用sed和php一起使用
sed -i \"s/${old_string}/${new_string}/\" passwords.php
sed -i \""s/${old_string}/${new_string}/\"" passwords.php
passwords.php的权限是所有用户的完全权限。 我也试过把绝对路径放到各处,但这也没有用。
我的call_pwd.php上的$ output变量出现在我回显$ commandline $ old_string和$ new_string
的时候change_password用户pass1 pass2
\['user'\] = 'pass1'
['user'] = 'pass2'
Could not change password, try again.
请帮帮我。谢谢。 为这么长的帖子道歉。
答案 0 :(得分:0)
你为什么这样做?您可以使用[un]serialize()
和file_[put/get]_contents()
在PHP中执行所有操作。
$ 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";}
我不会对这样做的安全含义发表任何评论,但是如果你只想在已经使用PHP时更改文本文件中的某些值,为什么不使用PHP呢?