nginx+php-fpm出现file not found错误

最近有朋友在搭建lnmp环境的时候,访问php文件,一直提示 File not found. ,这里记录下解决方法,帮助其他遇到同样问题的小伙伴。

遇到这种问题,一般就是两种情况:

  • nginx的配置文件不对

    在nginx.conf中,我们能看到一段被注释掉的默认配置

    location ~ \.php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
                include        fastcgi_params;
            }

    我们将这段配置注释去掉,并修改成下面这段

    location ~ \.php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
  • php-fpm运行的用户与nginx的不一致

    假定nginx当前运行用户是 root ,我们修改下 nginx.confuser 配置。

    user root;

    同时也需要将 php-fpm 的运行用户改成 root ,相关配置在 php-fpm.conf 中。

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    user = root
    group = root

    配置修改后,记得重启相关的服务,问题就解决了。

修改php.ini无法生效

php 的实际开发中,经常会遇到我明明已经修改了 php.ini ,服务也重启了,为毛还是没用?

web页面出现这种问题

造成这个问题的原因,一般都是由于修改的 php.ini 文件不正确,遇到这个问题,我们一般先通过 phpinfo() 查看当前加载的php.ini的路径是多少。具体查看方法:

//新建一个文件phpinfo.php,输入下面的内容
<?php
phpinfo();

写好之后,然后访问 http://yourwebsite/phpinfo.php ,查看对应的内容。 phpinfo 查看我们修改的 php.ini ,是否是 Loaded Configuration File 对应的路径。

命令行出现这种问题

这个同样也是因为路径问题,由上图可以看出,php.ini 的默认路径是由 Configuration File(php.ini) Path 决定的,当我们直接用 php 命令执行脚本的时候,默认读取的路径就是 Configuration File(php.ini) Path 下面的 php.ini ,如果我们不想使用默认路径的 php.ini ,可以使用 php -c 来指定 php.ini 的路径

php -c /usr/lib/ test.php //指定路径
php -c /usr/lib/test.ini test.php //指定要使用的配置文件

php中使用date函数的问题

在使用 phpdate 函数时,我们经常会遇到下面的这个错误。

PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the datedefaulttimezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone.

造成这个问题的主要原因是因为我们没有设置对应的时区,我们可以采用下面三种方式来解决。

  • 在页头使用 date_default_timezone_set 设置
date_default_timezone_set('PRC'); //东八时区 
echo date('Y-m-d H:i:s');
  • 在页头使用 ini_set
ini_set('date.timezone','Asia/Shanghai');
  • 修改 php.ini 文件
//找到date.timezone,并去掉前面的分号
date.timezone = PRC
//保存后,重启php-fpm或者http

linux下redis部署以及phpredis的安装

Redis是啥


redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

Redis的介绍

Redis的安装


安装

wget http://redis.googlecode.com/files/redis-2.6.12.tar.gz
tar zvxf redis-2.6.12.tar.gz
cd redis-2.6.12
make