php学习路(四)-- Tinkphp3.2工程搭建

  1. 下载thinkphp3.2(可自行选择合适版本)
    http://thinkphp.cn/down/framework.html
    下载后think3.2目录如下
    php学习路(四)-- Tinkphp3.2工程搭建_第1张图片
    think目录

    2.打开phpstrom,打开下载后的thinkphp3.2目录
    php学习路(四)-- Tinkphp3.2工程搭建_第2张图片
    image.png

修改项目名,如我改成了demo-thinkphp3.2,此时目录如下
www WEB部署目录(或者子目录)
├─index.php 入口文件
├─README.md README文件
├─Application 应用目录
├─Public 资源文件目录
└─ThinkPHP 框架目录

  1. 虚拟机上配置对应目录共享,nginx配置项目服务

    我的开发环境为mac,虚拟机采用vagrant管理,php项目通过共享目录的方式进行部署,首先配置项目的共享目录

  #常用文件目录
   config.vm.synced_folder "/Users/kai.yang/Desktop/LNMP/mnt", "/mnt"
 #应用目录
   config.vm.synced_folder "/Users/kai.yang/Desktop/LNMP/demo-thinkphp3", "/var/www"
 #nginx配置文件目录,为了修改配置方便
   config.vm.synced_folder "/Users/kai.yang/Desktop/LNMP/nginx","/etc/nginx/conf.d"

然后我们配置nginx的服务访问,在"/etc/nginx/conf.d下新间demo.conf

server
        {
            listen 80 ;
            #listen [::]:80 default_server ipv6only=on;
            #本地测试域名
            server_name  local.p2.cn;
             index  index.php index.html index.htm;
             root   /var/www;
            client_max_body_size 100m;
            #error_page   404   /404.html;
 
            # Deny access to PHP files in specific directory
            #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
            #if (!-e $request_filename)
            #    {
            #        rewrite ^/(.*)$ /index.php?s=$1 last;
            #    }
 
            #include enable-php.conf;
            location / {
                try_files $uri $uri/ /index.php?s=$uri&$args;
            }
            location ~ [^/]\.php(/|$)
                {
                    # comment try_files $uri =404; to enable pathinfo
                    try_files $uri =404;
                    fastcgi_pass  127.0.0.1:9000;
                    fastcgi_index index.php;
                    include /etc/nginx/fastcgi_params;
                    #include pathinfo.conf;
                    set $real_script_name $fastcgi_script_name;
                    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        set $real_script_name $1;
                        set $path_info $2;
                    }
                    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                    fastcgi_param SCRIPT_NAME $real_script_name;
                    fastcgi_param PATH_INFO $path_info;
                    fastcgi_param APPLICATION_ENV 'development';
                }
            #location /nginx_status
            #{
            #    stub_status on;
            #    access_log   off;
            #}
 
            location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
            {
                expires      30d;
            }
 
            location ~ .*\.(js|css)?$
            {
                expires      12h;
            }
 
            location ~ /.well-known {
                allow all;
            }
 
            location ~ /\.
            {
                deny all;
            }
 
            access_log  /var/log/nginx/fly-crm.log;

}

我本机测试采用域名local.p2.cn,所以在mac的hosts文件中配置

kaiyangdembp-2:CENTOS7-1 kai.yang$ vi /etc/hosts
#添加此行配置,此ip是我通过private配置的本地ip,请看上篇文章
192.168.2.104 local.p2.cn

此时在浏览器访问local.p2.cn,没有问题的话就能访问tp(thinkphp)的欢迎页面,当然我是遇到了如下问题,大家有相同的就参考下

4.遇到问题处理:
下面的问题,我都是通过查看nginx的错误日志error.log发现的,初学者记得看日志的方法,nginx的错误日志在nginx.conf 中有指定,可以找到

cat nginx.conf 
user  vagrant;
worker_processes  1;

#错误日志路径,查看此文件即可,可以通过tail -f   /var/log/nginx/error.log实时查看错误信息,具体百度下日志查看方法
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

  1. "/www/index.php" is forbidden (13: Permission denied)
    解决方案:常见的错误原因
+ /www/index.php文件不存在
+ nginx的启动用户无权限操作应用的工作目录,我就是此原因,修改nginx.conf
#修改为你能操作应用目录的用户,我直接改为root方便测试,实际生产需要配置单独用户
user  root;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}
  1. FastCGI sent in stderr: "Primary script unknown"
    网上百度会发现很多原因,主要的就是
  • 脚本配置 ,在nginx配置SCRIPT_FILENAME,不过一般初学者按网上配置,不会有这个问题
   #include pathinfo.conf;
                    set $real_script_name $fastcgi_script_name;
                    if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                        set $real_script_name $1;
                        set $path_info $2;
                    }
                    fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
                    fastcgi_param SCRIPT_NAME $real_script_name;
                    fastcgi_param PATH_INFO $path_info;
                    fastcgi_param APPLICATION_ENV 'development';

这个问题引起错误其实并不常见

  • 下面常见的问题就是权限的问题,nginx和php-fpm不能互相通信,常用做法就是nginx和php-fpm使用相同的用户启动,这样此用户就有了nginx和php的权限,不会再有此问题,如下第一步,把刚才的nginx用户改成vagrant(这是因为我是用vagrant启动的虚拟机,而应用挂载目录权限都是这个用户,所以为了减少错误,直接用了此用户),修改nginx.conf
user  vagrant;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

修改php的配置文件

[root@10 nginx]# ps -ef|grep php
root      5812     1  0 04:23 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
#会发现默认是nobody用户
nobody   5813  5812  0 04:23 ?        00:00:00 php-fpm: pool www
nobody   5814  5812  0 04:23 ?        00:00:00 php-fpm: pool www
root      6231  5144  0 04:31 pts/0    00:00:00 grep --color=auto php


[root@10 nginx]# cat /usr/local/php/etc/php-fpm.conf
......
include=/usr/local/php/etc/php-fpm.d/*.conf

[root@10 nginx]# cd /usr/local/php/etc/php-fpm.d/
[root@10 php-fpm.d]# ls
www.conf  www.conf.default
[root@10 php-fpm.d]#  vi www.conf
#找到user和grouop改为我们用的用户
user = vagrant
group = vagrant
#重启php-fpm
[root@10 php-fpm.d]# service php-fpm restart
[root@10 php-fpm.d]# ps -ef|grep php
root      6431     1  0 04:35 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
#用户已更换
vagrant   6432  6431  0 04:35 ?        00:00:00 php-fpm: pool www
vagrant   6433  6431  0 04:35 ?        00:00:00 php-fpm: pool www
root      6461  5144  0 04:35 pts/0    00:00:00 grep --color=auto php

[root@10 php-fpm.d]# nginx -s reload
#重启nginx
[root@10 php-fpm.d]# ps -ef|grep nginx
root      5201  5187  0 03:53 pts/1    00:00:00 tail -f /var/log/nginx/error.log
root      5206     1  0 03:54 ?        00:00:00 nginx: master process nginx
vagrant   6495  5206  0 04:36 ?        00:00:00 nginx: worker process
root      6507  5144  0 04:36 pts/0    00:00:00 grep --color=auto nginx

此时再重试,成功解决问题


php学习路(四)-- Tinkphp3.2工程搭建_第3张图片
访问服务

此时,我们完成了第一步,tp项目搭建成功。

目录:php学习路-- Thinkphp开发入门指南简介

你可能感兴趣的:(php学习路(四)-- Tinkphp3.2工程搭建)