【问题标题】:php - proc_open (or other function that works)php - proc_open(或其他有效的函数)
【发布时间】:2013-05-25 12:33:01
【问题描述】:

我需要通过浏览器执行一些命令行。 我需要在命令行中做的是:

$login
<login name>
<password>
$passwd
<old password>
<new password>
<retype new password>

那么,我该如何使用proc_open 函数来做到这一点? 还是我应该使用其他函数来执行此操作?


Adam Wright,我已经尝试过您的示例,但我无法更改用户密码。 我是否需要在脚本中做任何其他事情(除了定义 $user、$userPassword 和 $newPassword)?

谢谢

【问题讨论】:

    标签: php passwd proc-open


    【解决方案1】:

    您不需要发出登录来更改用户的密码,只需将他们的名字提供给 passwd。使用 popen (因为我们不需要在这个小例子中阅读),比如

    $pp = popen("passwd ${user}", "w");
    fwrite($pp, $oldPassword . '\n');
    fwrite($pp, $newPassword . '\n');
    fwrite($pp, $newPassword . '\n');
    pclose($pp);
    

    如果您想阅读响应,请使用 proc_open,然后从给定的标准输出句柄中读取。

    我希望这一切都得到了很好的保护,并且您对用户名进行了很多的清理。

    【讨论】:

    • 这仅在 php 解释器以超级用户权限运行时有效(只有 root 可以更改其他用户的密码)。如果您不关心安全性,您可以设置 passwd 的超级用户位或使用 sudo。
    【解决方案2】:

    http://pecl.php.net/package/PAM 可能是您可以使用的东西。
    它有一个函数bool pam_chpass(string $username, string $oldpassword, string $newpassword [, string &amp;$error ])
    但是我没用过。

    【讨论】:

      【解决方案3】:

      在互联网上找到了这个Change Linux or UNIX system password using PHP script

      关于如何创建一个用户可以更改自己的系统密码的网站的非常详细的描述。

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 2017-01-15
        • 2012-04-01
        • 2010-10-31
        • 1970-01-01
        • 2017-01-15
        • 2018-11-30
        • 1970-01-01
        • 2011-10-01
        相关资源
        最近更新 更多