0

我正在尝试在 Ubuntu 18.2 上设置 Laravel 5.6 + PHP 7.2(使用 Instantclient 12.2 和 oracle OCI)+ Nginx。另外,我为 Laravel 安装了 "yajra/laravel-oci8": "^5.6"。为了确保我正确安装了 Instantclient,我还尝试了 sqlplus 以确保我可以与 oracle 服务器建立连接。

因此,我应该正确配置所有内容,并且当我使用“ php artisan serve --host=192.168.56.12 --port=8000 ”命令提供页面时,oracle 连接器工作正常。

测试代码如下:

public function testorcl(){
    if (function_exists('oci_connect') == false){
        return "oci driver not available";
    }
}

同时,我在默认端口 80上启用了 Nginx 。两个 Web 服务器都服务于相同的 Laravel 代码库。

奇怪的是,Nginx找不到 oci_connect()!!

然后,我检查两台服务器上的 phpinfo() 页面。

在此处输入图像描述

我发现 oci8 模块没有安装在 Nginx 服务器上。但是,“php artisan serve”显示 oci8 已安装。安装的 oci8 模块应显示如下图所示。 在此处输入图像描述

不仅oci8模块部分不同,环境变量列表也不同。Nginx 仅提供如下所示的 4 个环境变量,而 php artisan 提供了一长串变量(太长,无法在单个页面中显示)。 在此处输入图像描述

所以,我认为是 Nginx 导致了这个问题。这是我的 Nginx 配置。

server {
         listen 80;
         listen [::]:80 ipv6only=on;

         # Log files for Debugging
         access_log /var/log/nginx/laravel-access.log;
         error_log /var/log/nginx/laravel-error.log;

         # Webroot Directory for Laravel project
         root /home/ub18/test/public;
         index index.php index.html index.htm;

         # Your Domain Name
         #server_name example.com;

         location / {
                 try_files $uri $uri/ /index.php?$query_string;
         }

         # PHP-FPM Configuration Nginx
         location ~ \.php$ {
                 try_files $uri =404;
                 fastcgi_split_path_info ^(.+\.php)(/.+)$;
                 fastcgi_pass unix:/run/php/php7.2-fpm.sock;
                 fastcgi_index index.php;
                 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                 include fastcgi_params;
         }

    # deny access to . files, for security
    #
    location ~ /\. {
        log_not_found off; 
        deny all;
    }
 }

问题是: 1. 如何让我的 OCI 工作?我错过了什么?2. 如何确保 Nginx 可以加载正确的环境变量,就像“ php artisan serve ”一样?

欢迎任何建议,谢谢。

4

0 回答 0