背景
最近接了个小外包项目,因为不仅要写后端还要写前端,我就选择了 PHP 中的 CodeIgniter 来实现,因为最开始接触 PHP 就是用这个框架来实现项目的,CodeIgniter 只要加载几个主要文件就可以运行了,很简单;开发也很自由,很快。我觉得 ThinkPHP 是用来写移动端H5之类的框架,Laravel 比较重是用来写大型项目的,yii 也是写大型应用的,现在正用的 PhalApi 是专门用来写接口的,一个小外包项目还不至于前后端分离来实现,所以就没选这些框架,Python 和 Go 也不太适合做这种小 web 应用项目,就用了我 PHP 道路上的启蒙框架 CodeIgniter。CodeIgniter(CI)在Nginx 下需要特别的配置才可以使用,这篇主要就是记录下在 Nginx 下搭建 CodeIgniter 遇到的一些问题。
问题集锦
数据库驱动连接失败
报错信息如下:
A PHP Error was encountered
Severity: Warning
Message: mysqli::real_connect(): (HY000/2002): No such file or directory
Filename: mysqli/mysqli_driver.php
解决方法:
这个问题是 php.ini 配置的问题。
默认以下配置为空,将以下三个选项设置成你 mysql.sock 对应的目录就可以解决了。(以下配置为Linux下)
mysql.default_socket = /tmp/mysql.sock
pdo_mysql.default_socket= /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
Only variable references should be returned by reference
报错信息如下:
A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257
解决方法:
原代码:
return $_config[0] = & $config;
修改后:
$_config[0] = & $config;
return $_config[0];
Session报错
报错信息如下:
A PHP Error was encountered
Severity: Warning
Message: mkdir(): Invalid path
Filename: drivers/Session_files_driver.php
Line Number: 117
解决方法:
将 config 配置文件中 sess_save_path 改为如下
$config['sess_save_path'] = FCPATH.'public/sess_save_path';
Url重写
在 CI 框架下,有一个默认的 controller,叫 welcome。需要通过这样的方式访问
http://www.example.com/index.php/welcome/index。如果我们想要以 http://www.example.com/welcome/index 这样访问URL,就需要 nginx 的 rewrite。同时因为不去除 index.php 的话,用 Jquery post 请求会有问题。
CodeIgniter修改
对 application/config/config.php
进行修改。
$config['base_url'] = 'http://dev.lyafei.com';
$config['uri_protocol'] = "PATH_INFO";
修改Nginx配置
对 nginx 的进行配置,nginx.conf
server {
listen 80;
server_name dev.lyafei.com;
access_log /data/wwwlogs/access_nginx.log combined;
root /data/wwwroot/storage-management-work;
index index.html index.htm index.php;
#error_page 404 /404.html;
#error_page 502 /502.html;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location / {
#这里使用try_files进行url重写,不用rewrite了。
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ ^/(\.user.ini|\.ht|\.git|\.svn|\.project|LICENSE|README.md) {
deny all;
}
}
要特别注意 include fastcgi_params;
,如果没有这一行,那么你的 PHP 程序会无法运行的。
5555
6666 强
瞎比拐子你也很强啊!!!