使用 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 函数

已经尝试过重启,关闭笔记本电脑,NginxPHP之类的任何服务,仍然没有解决

当我在 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。

screenshot when test 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...