如何解决使用 nginx 的 oci8 扩展使网关失效 - mac m1
抱歉解释不好和语法不好
➜ project-name PHP --version
PHP 7.4.16 (cli) (built: Mar 4 2021 12:36:48) ( NTS )
copyright (c) The PHP Group
Zend Engine v3.4.0,copyright (c) Zend Technologies
with Zend OPcache v7.4.16,copyright (c),by Zend Technologies
and i was trying too with v8
➜ ~ PHP --version
PHP 8.0.7 (cli) (built: Jun 3 2021 19:10:37) ( NTS )
copyright (c) The PHP Group
Zend Engine v4.0.7,copyright (c) Zend Technologies
with Zend OPcache v8.0.7,by Zend Technologies
在我尝试使用 3 个版本的 oracle Instant、sdk 之前
- v11.1
- v12.2
- v19.8.0.0.0
我通过在命令需要 oci8 的地方运行 composer require yajra/laravel-oci8:^7
来检查我的 oci 是否正常工作。
➜ project-name pa package:discover --ansi
discovered Package: facade/ignition
discovered Package: fideloper/proxy
discovered Package: fruitcake/laravel-cors
discovered Package: laravel/tinker
discovered Package: nesbot/carbon
discovered Package: nunomaduro/collision
discovered Package: yajra/laravel-oci8
Package manifest generated successfully.
但是,,,
当我查看 PHPinfo()
时,我的页面正在运行 502 Bad Gateway Nginx/1.19.8
当我检查 oci_error()
时,响应是 false
这意味着没有错误,对吧?。
当我在 ;extension=oci8.so
上评论 PHP.ini
时
和
➜ project-name brew services restart PHP@7.4
PHPinfo()
可以工作,但我需要 oci_connect
函数。
已经尝试过重启,关闭笔记本电脑,Nginx,PHP之类的任何服务,仍然没有解决,
当我在 Nginx 或 valet 上检查我的日志时,没有错误或日志
/usr/local/var/log/Nginx
/opt/Nginx/logs/error.log
我的安装 oci8 步骤是
解压 oracle 包 (instant,sdk,sqlplus)
sudo ln -s /opt/instantclient_19_8/sdk/include/*.h /usr/local/include/
sudo ln -s /opt/instantclient_19_8/sqlplus /usr/local/bin/
sudo ln -s /opt/instantclient_19_8/*.dylib /usr/local/lib/
sudo ln -s /opt/instantclient_19_8/*.dylib.19.1 /usr/local/lib/
sudo ln -s /usr/local/lib/libocci.dylib.19.1 /usr/local/lib/libocci.dylib
sudo ln -s /usr/local/lib/libclntsh.dylib.19.1 /usr/local/lib/libclntsh.dylib
sudo pecl install oci8-2.2.0
我也试过 sudo pecl install oci8 for PHP8 version
我对oracle home的回复instantclient,/usr/local/lib
Build process completed successfully
Installing '/opt/homebrew/Cellar/PHP@7.4/7.4.16/pecl/20190902/oci8.so'
install ok: channel://pecl.PHP.net/oci8-2.2.0
Extension oci8 enabled in PHP.ini
所以我改变了
extension_dir = "/opt/homebrew/Cellar/PHP@7.4/7.4.16/pecl/20190902"
;extension_dir = "/opt/homebrew/lib/PHP/20190902"
但在 PHP8 中我不需要更改目录。
我像上面检查的那样运行检查 oci。
➜ ~ sudo Nginx -t
Nginx: the configuration file /opt/homebrew/etc/Nginx/Nginx.conf Syntax is ok
Nginx: configuration file /opt/homebrew/etc/Nginx/Nginx.conf test is successful
当我尝试使用 PHPinfo() 检查时,条件是 502 bad gateway -> 检查
<?PHP
if (oci_connect('xusername','xpassword','xip/XE','xcharset')) {
print 'right';
} else {
print 'error';
}
➜ oracle PHP -q b.PHP
dyld: lazy symbol binding Failed: Symbol not found: _OCIEnvNlsCreate
Referenced from: /opt/homebrew/lib/PHP/pecl/20200930/oci8.so
Expected in: flat namespace
dyld: Symbol not found: _OCIEnvNlsCreate
Referenced from: /opt/homebrew/lib/PHP/pecl/20200930/oci8.so
Expected in: flat namespace
[1] 35993 abort PHP -q b.PHP
通过引用 https://theoldape.com/mac-os-x-php-with-oracle-oci8-extension/ 其意思是错误的操作系统版本。嗯
我在我的设备上使用 instantclient-basic-macos.x64-19.8.0.0.0dbru
进行了测试 mbp m1
仅在 https://www.oracle.com/database/technologies/instant-client/downloads.html 中 适用于 macOS (Intel x86) 的 Instant Client 和 Mac OS X 即时客户端 (PPC)
我发现的问题,和 dyld: lazy symbol binding failed for php oic8 on Apple M1
上的一样我已经用 instantclient-sqlplus-macosx-10.1.0.3
解决了我的 PHPinfo()(Mac OS X (PPC) 的即时客户端)
所以我可以看到oci8的配置表
然后我尝试 PHP -i 我已经解决了没有像 on 那样的错误 dyld: lazy symbol binding failed for php oic8 on Apple M1 (dyld: lazy symbol binding Failed: Symbol not found: _OCIClientVersion),
但是当我尝试
➜ oracle PHP -q b.PHP
我仍然收到错误 dyld:惰性符号绑定失败:找不到符号:_OCIEnvNlsCreate
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。