php代码有办法实现打开一个进程,写入数据吗?

php代码有办法实现下面这种情况吗?

在页面上第一次提交用户名和密码,执行一条命令,触发二次验证,触发后,如果不填入验证码,执行那条命令的进程还在

第二次提交验证码,进入到第一次提交的进程,写入验证码,让第一次的进程继续执行

提交的页面如下:
20200716.jpg

以下我的这种写法是实现不了的,因为再执行一次的时候,exec执行的命令会重新发送一次验证码

public function save()
    {
        $account = trim(input('param.account'));
        if (!$account) {
            $this->error('账号不能为空');
            exit;
        }
        $password = trim(input('param.password'));
        if (!$password) {
            $this->error('密码不能为空');
            exit;
        }
        $code = trim(input('param.code'));
        if (AppIdInfo::check($account)) {
            $this->error('账号已存在');
            exit;
        }
        $bundleId = "com.iosdeveloper.test" . gen_uuid();
        if (!$code) {
            exec("/usr/local/bin/fastlane login user:{$account} pwd:{$password} bundleid:{$bundleId}", $out, $status);
            $out = implode(',', $out);
            if (stripos('Please enter the 6 digit code', $out) !== false) {
                $this->error('需要二次验证,请输入验证码');
                exit;
            }
        } else {
            $command = "/usr/local/bin/fastlane login user:{$account} pwd:{$password} bundleid:{$bundleId}";
            $fp = @popen($command, "w");
            @fputs($fp, $code);
            @pclose($fp);
        }
        $this->success('添加成功!', '/admin/Appid/index');
    }

以及这个命令直接在服务器上执行的情况:
QQ截图20200715104543.jpg

阅读 3k
4 个回答

如果只是你当前这个业务场景,换个思路,直接把这个业务逻辑拆成两部分就可以了,因为用户提交用户名和密码之后到第二次提交验证码之前,你后台也没有其它业务要运行,为啥希望这个进程一直存在呢?

第一次输入用户名和密码,通过用户名查询出来用户需要二次认证,返回需要二次认证的响应,同时看你想法,进程一结束.
页面收到需要二次认证的请求后,在密码下面加上验证码逻辑,请求二步认证的时候,把用户,密码,验证码 一起传回来,进行验证码和密码的校验.

密码的校验,看你需求,你可以在第一次请求的时候就验证密码是否通过,也可以像上面说的,放到第二步一起认证

php在触发客户端二次验证之前已经结束了。
建议你了解一下CS(客户端服务器)模式。

新手上路,请多包涵

你的目的只是想保留验证场景。可以通过数据存储(mysql,redis之类的)保存验证流程的场景数据。不需要用到常驻进程。

拆开,用状态判断是否触发和执行

推荐问题