php调用python失败怎么办

藏色散人
发布: 2019-12-13 14:33:53
原创
5408人浏览过

php调用python失败怎么办

php调用python失败怎么办?

PHP调用Python失败的解决办法

假设有文件:php_test.php  python_test.py

在php文件中运行Python:

exec("python python_test.py", $array, $ret);
登录后复制

如果运行Python出错并不能保存在数组array中,因此应该把标准错误重定向到文件中,以上代码改写如下:

立即学习PHP免费学习笔记(深入)”;

exec("python python_test.py 2>error.txt", $array, $ret);
登录后复制

在bash中0,1,2三个数字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。

也可以通过以下方式将标准错误重定向到标准输出保存到$array中:

exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
登录后复制

然后就可以根据错误信息去寻求解决办法。

一般在终端通过命令运行PHP文件是可以马上看到错误信息的,但是通过浏览器运行PHP文件就只能上面所述方法去输出错误信息。因此问题也就是在命令行下PHP可以成功执行Python文件,而通过浏览器就不能成功运行,这是因为两种方式所调用的动态库不一致!

通过命令行方式调用的是系统中的已有的动态库,而通过浏览器方式调用的是Web服务器中的动态库。(我安装的XAMPP,所以通过浏览器方式调用的就是lampp/lib中的动态库)。

解决办法:

    1.在输出的错误信息中找到出错的动态库

轻舟办公
轻舟办公

基于AI的智能办公平台

轻舟办公 194
查看详情 轻舟办公

    2.通过locate命令找到相关的动态库所在的位置:locate libxxx.so

    3.将web服务器中的同名动态库删除或重命名

    4.将通过第2步在系统中找到的动态库链接到web服务器的lib目录中

实例:

Python中使用hashlib模块时可能出现两个错误:

<span style="font-family:Arial, Helvetica, sans-serif;">relocation error: python: symbol OpenSSL_add_all_digests, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference</span>
<span style="font-family:Arial, Helvetica, sans-serif;">python: /opt/lampp/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.2' not found (required by /opt/lampp/lib/libssl.so.1.0.0)</span>
登录后复制

1.找出系统中包含libcrypto.so.1.0.0的所有路径:locate libcryto.so.1.1

/home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/libimobiledevice-android-master/openssl/libcrypto.so.1.0.0
/home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/libimobiledevice-android-master/out/fsroot/lib/libcrypto.so.1.0.0
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/opt/lampp/lib/libcrypto.so.1.0.0
登录后复制

2.将web服务器中的同名动态库重命名:

sudo mv /opt/lampp/lib/libcryto.so.1.1 /opt/lampp/lib/libcryto.so.1.1.bak
登录后复制

3.将系统中libcryto.so.1.1链接到web服务器的lib目录中:

sudo ln -s  /lib/x86_64-linux-gnu/libcrypto.so.1.0.0  /opt/lampp/lib/libcryto.so.1.1
登录后复制

libssl.so.1.0.0解决步骤同上。

更多PHP相关知识,请访问PHP教程

以上就是php调用python失败怎么办的详细内容,更多请关注php中文网其它相关文章!

相关标签:
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号