请问php如何与bat文件进行交互?

比如正常执行bat文件后是需要用户在窗口里写入一些内容,然后回车提交的,那么在php里需要如何去与之交互?

使用proc_open的问题

我准备使用proc_open来与bat文件进行交互,代码是这样的

$descriptorspec = array(
    0 => array("pipe", "r"),
    1 => array("pipe", "w"),
    2 => array("file", storage_path('logs/laravel.log'), "a")
);
$process = proc_open('D:\s1.bat', $descriptorspec, $pipes);

我运行了一个不存在的文件,错误写在了laravel.log中,但为什么错误信息是乱码?

请问php如何与bat文件进行交互?
我尝试了在PHPStorm里修改项目的文件编码,或文件的转码,但都没有任何效果。。。

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 10

纯手撸的话,可以用 proc_open 这个函数的第二个参数和第三个参数可以用来控制输入。

也可以用 symfony/process 这个封装过的或许要好用一点二,但是原理都是一样的。

<?php

$descriptorspec = [
    0 => ["pipe", "r"],  // 标准输入,子进程从此管道中读取数据
];

$cwd = __DIR__;

$process = proc_open('scratch_32.bat', $descriptorspec, $pipes, $cwd);

if (is_resource($process)) {
    // bat 中的 set /p 会在这里停住,然后现在输入 Hello world!
    fwrite($pipes[0], "Hello world!");
    fclose($pipes[0]);

    // 切记:在调用 proc_close 之前关闭所有的管道以避免死锁。
    $return_value = proc_close($process);

    echo "command returned $return_value\n";
}
set /p var1=
echo %var1% > rec.txt
2年前 评论
www295686243 (楼主) 2年前
Rache1 (作者) 2年前
www295686243 (楼主) 2年前
www295686243 (楼主) 2年前
Rache1 (作者) 2年前
Rache1 (作者) 2年前

运行 bat 然后输入你要输入的参数

本地 就 php 对应功能的 xx.php eg: php index.php 参数 参数 参数

要么就 请求 你的 phpweb

2年前 评论
www295686243 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!