Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
208 views
in Technique[技术] by (71.8m points)

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.6k users

...