从 php 脚本向 shell 命令提供登录密码

Provide login password from php script to shell command

我有一个自定义身份验证应用程序,需要通过 STDIN 提供用户密码。 例如,我可以在命令行上 运行 这个(在 linux 中):

echo "P455w0rd" | authenticate -A username

退出状态为 0 或 1,我需要使用它来确定身份验证是通过还是失败。 'authenticate' 应用程序阻止从 STDIN 读取密码。我可以 运行 来自 PHP 的身份验证应用程序(编辑):

$username = $_POST['username'];
$password = $_POST['password'];
// I need to run this shell command and provide the password via STDIN (how?)    
exec("authenticate -A $username", $output, $retval);

exec 在应用等待 STDIN 时阻塞。如何从 PHP 脚本向应用程序提供密码?这行得通吗?

$username = $_POST['username'];
$password = $_POST['password'];
// I need to run this shell command and provide the password via STDIN (how?)
// Can I exec a background process and then fwrite to STDOUT?  
exec("authenticate -A $username &", $output, $retval);
fwrite(STDOUT, $password);

您的一些 php 代码是文件 t.php 中的示例:

<?php
echo "pwd";
?>

所以您需要将输出作为参数传递给某些命令...好的,您可以在 shell 中执行此操作,如下所示:

shell$: php t.php | xargs echo

输出:

pwd

我开始着手更改代码以使用 Unix 域套接字,并想到了仅通过环境变量提供密码的想法。我最终更改了身份验证可执行文件以查找环境变量,并更改了 php 代码以通过 putenv() 提供一个。所以现在看起来像这样:

putenv("THE_PW=$password");
$returnval = exec("authenticate -A $username -n THE_PW", $output, $retval);