You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过PHP触发已注册的Windows自定义协议处理程序以启动目标应用?

如何通过PHP触发已注册的Windows自定义协议处理程序以启动目标应用?

兄弟,我来给你唠唠怎么用PHP触发你那个已经注册好的Windows自定义协议,启动你的VideoPlugin应用哈。首先得确认你的PHP是跑在本地Windows的Web服务器上的(比如XAMPP、WAMP这类),毕竟要触发本地应用,远程PHP肯定管不着你本地Windows的事儿。

  • 直接用PHP的执行函数调用Windows命令
    你已经通过Win+R验证了自定义协议videoplugin://能正常启动应用,那在PHP里可以用exec或者shell_exec调用Windows的start命令来触发这个协议。比如直接写:

    exec('start "" "videoplugin://IP:100.100.210.16;Port:90;UserName:adm"');
    

    这里start后面的空引号是为了兼容可能带空格的路径或协议参数,就算你现在的参数里没空格,加上也更稳妥。或者用shell_exec也能达到同样效果:

    $output = shell_exec('start "" "videoplugin://IP:100.100.210.16;Port:90;UserName:adm"');
    
  • 注意Web服务的权限坑(这是最容易踩的!)
    很多时候本地跑PHP用的Apache、IIS这类Web服务,默认是用系统账户(比如Local System)运行的,这个账户没有权限访问你当前登录用户的交互桌面,就算你代码写对了,应用也可能在后台跑但看不到界面。这时候得把Web服务的运行账户改成你当前登录的Windows用户:

    • 比如用XAMPP的话:打开XAMPP的服务管理器,找到Apache服务右键属性,切换到「登录」选项卡,选择「此账户」,输入你当前Windows的用户名和密码,然后重启Apache服务。
    • 用IIS的话:打开IIS管理器,找到你站点对应的应用池,右键选「高级设置」,在「进程模型」里把「标识」改成你的Windows用户账户,重启应用池就行。
  • 先手动验证命令再写进PHP
    怕出问题的话,先在Windows的命令提示符(CMD)里手动运行start "" "videoplugin://IP:100.100.210.16;Port:90;UserName:adm",确认能正常启动应用,再把这段命令复制到PHP里,这样能排除命令本身的问题。

  • 用proc_open调试(可选)
    如果exec没反应,想看看有没有错误信息,可以用proc_open函数,它能获取执行过程中的输出和错误,方便排查问题:

    $descriptorspec = array(
        0 => array("pipe", "r"),
        1 => array("pipe", "w"),
        2 => array("pipe", "w")
    );
    $process = proc_open('start "" "videoplugin://IP:100.100.210.16;Port:90;UserName:adm"', $descriptorspec, $pipes, null, null);
    if (is_resource($process)) {
        $errors = stream_get_contents($pipes[2]);
        fclose($pipes[0]);
        fclose($pipes[1]);
        fclose($pipes[2]);
        proc_close($process);
        // 打印错误信息排查问题
        var_dump($errors);
    }
    

备注:内容来源于stack exchange,提问作者Dev Chris

火山引擎 最新活动