soarli

解决通过PHP调用Python输出空白及工作目录问题记录
背景为实现在Web端通过PHP调用Python完成基于PaddleOCR的文字识别并获取特定算法处理过的结果,真可...
扫描右侧二维码阅读全文
24
2022/01

解决通过PHP调用Python输出空白及工作目录问题记录

背景

为实现在Web端通过PHP调用Python完成基于PaddleOCR的文字识别并获取特定算法处理过的结果,真可谓踩了诸多大坑,经过前天的在PHP中调用Python并获取运行结果和昨天的Python运行多条shell并获取返回值记录,对于PHP调用PythonPython调用PaddleOCRShell有了根本性的理论基础。

然而今天(昨天晚上)在Web端通过PHP调用PythonPython调用PaddleOCRShell结合时,网页无任何返回结果,查阅资料换成其他接口函数仍然出现各种bug(网页就是不返回显示内容),随后一篇文章给了我尝试通过bat批处理文件作为调用PHP调用Python的中间件然而还是无果。

随后将bat文件的类型改为cmd仍然无果,改为sh并通过PHPsystem函数调用则能实现PHP调用Git Bash客户端,但返回结果仅限于客户端且中文内容为纯乱码,并不像网上所说会自动返回结果到浏览器。

其间有PHP命令字符串中的空格符号、PHP项目执行路径、Python中间件路径、绝对路径相对路径、文本编码等诸多变量需要控制,经过反复调试排查锁定问题的核心在于中间Python程序切换路径的方法不正确(被程序调用执行不同于被控制台调用执行,使用cd无效)。

解决

shell_exec不适用,会返回空白,使用以下命令代替:

exec('python getnumber.py 001.png 2>&1', $out, $res);
dump($out);

遇到的下图所示问题:

image-20220124011005674

通过:

# 切换目录到PaddleOCR运行目录
# cmd1 = "cd " + PPOCrPath # 被控制台调用
os.chdir(PPOCrPath)  # 被PHP调用

即可得到正确的结果:

image-20220124015422980

参考资料:

https://blog.csdn.net/weixin_31720623/article/details/115247694

https://www.fullstar.top/75.html

https://mrking00.github.io/2020/09/30/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%80%BB%E7%BB%93/

https://blog.csdn.net/qiulinwoaini/article/details/49786815

https://blog.csdn.net/weixin_27972919/article/details/115645995

https://cloud.tencent.com/developer/article/1534248

https://blog.csdn.net/baidu_19473529/article/details/83066783

最后修改:2022 年 01 月 24 日 11 : 57 PM

发表评论