我正在尝试在 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 ”一样?
欢迎任何建议,谢谢。