如何从PHP脚本中将数据传输到可执行文件中?

时间:2018-03-21 14:46:20

标签: php linux stdin shell-exec

我有一个二进制文件,它通过将文件内容传递给它cat query.sql | go-mysql-format来获取我在命令行使用的stdin的输入,但是如何将变量传递给可执行文件?

目前我有

file_put_contents($File = "$_SERVER[DOCUMENT_ROOT]/tmp/" . uuid(), $MySQL);
$o = shell_exec('cat ' . escapeshellarg($File) . ' | go-mysql-format --html');

基本上我想跳过文件创建。

同样重要的是要注意数据将包含换行符,因此我不确定用escapeshellarg包装变量是否合适

1 个答案:

答案 0 :(得分:0)

感谢@NigelRen正确方向指出Array(a,2,true)

我将函数中的步骤包装在一起供我稍后使用,这可能会有所帮助。

proc_open

返回

function exec_stdin(string $Command, string $Data) {
    $_ = proc_open($Command, [['pipe', 'r'], ['pipe', 'w'], ['pipe', 'w']], $p);
    if (is_resource($_)) {
        fwrite($p[0], $Data);
        fclose($p[0]);
        $o = stream_get_contents($p[1]);
        fclose($p[1]);

        $_ = proc_close($_);

        return $o;
    }

    return false;
}

var_dump(exec_stdin('go-mysql-format', 'yeet'));

这正是我需要的输出!