带你进入神奇的 symfony 世界
安装symfony2
我们默认你使用的是centos7操作系统并已经安装好了php和nginx(如果还没有请回过头看前面几篇)。
首先,我们来安装symfony安装器。假设我们要安装到/usr/local/bin下,那么执行
sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
sudo chmod a+x /usr/local/bin/symfony
执行一下symfony命令看看是否正常显示帮助信息
下面找到一个放置自己网站的目录,比如/data/httpdir/,创建好目录后,在httpdir下执行如下命令下载并初始化网站目录
[root@centos7vm httpdir]# symfony new mywebsite 2.8
这里的2.8是symfony2的版本,现在已经发布到3了,但一些流行的组件兼容性可能不好,所以依然用最稳定的2.8版
《《《《《《《《《《《《《《《《《《《《《《《《《《《
创建mywebsite时你可能会遇到这样的警告
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 date_default_timezone_set() function. blublu...
这是因为你的php.ini文件没有指定时区,修改/etc/php.ini文件,把
;date.timezone =
改成
date.timezone = Asia/Shanghai
注意:要去掉前面的";"
重启php-fpm
[root@centos7vm httpdir]# service php-fpm restart
》》》》》》》》》》》》》》》》》》》》》》》》》》
有没有发现在httpdir目录下出现了mywebsite目录?走进去瞧瞧symfony2已经为你做了什么
[root@centos7vm mywebsite]# ls
app bin composer.json composer.lock README.md src vendor web
web目录是网站的入口,假设你的网站叫做www.lcsays.com,那么www.lcsays.com/test.php一般会通过nginx配置为对应web/test.php文件(当然这都需要你的ngixn配置文件配合,如果你非要配置成web目录的上一级也可以,只不过网站不能用而已,呵呵)。一般会把可以通过url访问的文件放到这里,比如css、js、图片、静态html文件等
app目录是全局应用的运行相关文件(包括入口函数、组件加载、全局配置、log文件、cache文件等),这里面还有一个重要二进制文件console,用来方便我们做自动化操作,后面会讲到
src是你自己开发php代码的地方,一般以组件形式整理,symfony2里叫做bundle,一会再说bundle是什么
vendor是symfony2自带组件放置的地方,也是最庞大的地方,一般不需要我们修改里面的内容,使用里面哪个功能就可以在app目录下的配置文件里配置,不使用也无妨,缺什么组件也可以手工安装组件到vendor下,安装方法马上便知
bin目录里是symfony2提供给我们的一些二进制工具
composer.json是这个网站工程里用到symfony2中组件的配置和版本等信息
好!什么都不用改,我们现在去改下nginx的配置,让网站指向web目录,这里需要看一下如何配置nginx实现虚拟主机
nginx.conf如下:
user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 20M;
include /etc/nginx/conf.d/*.conf;
}
mywebsite.conf如下:
log_format logformat '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
server {
listen 80;
server_name 172.16.142.130;
index app.php;
root /data/httpdir/mywebsite/web;
location / {
if (!-e $request_filename){
rewrite ^/(.+)$ /app.php/$1 last;
}
client_max_body_size 20M;
}
location ~ ^/(app|app_dev)\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
client_max_body_size 20M;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 1h;
client_max_body_size 20M;
}
access_log /data/httpdir/logs/mywebsite.log logformat;
error_log /data/httpdir/logs/mywebsite.error_log;
}
因为系统自带的service命令起动服务有些无法理解的现象,所以我们以后都采取直接启动nginx,强制杀掉所有nginx进程后,执行
[root@centos7vm mywebsite]# nginx
以后如果想重启nginx可以用命令
[root@centos7vm mywebsite]# nginx -s restart
其实如果只是改配置,可以调用reload命令
[root@centos7vm mywebsite]# nginx -s reload
为了简单,把php-fpm的子进程用户也改到nobody,修改/etc/php-fpm.d/www.conf,把里面的
; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
改成
; RPM: apache Choosed to be able to access some dir as httpd
user = nobody
; RPM: Keep a group allowed to write in log dir.
group = nobody
因为系统自带的service命令起动服务有些无法理解的现象,所以我们以后都采取直接启动php-fpm,强制杀掉所有php-fpm进程后,执行
[root@centos7vm mywebsite]# php-fpm
以后如果想重启php-fpm可以用命令:
[root@centos7vm mywebsite]# kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`
OK,现在可以打开http://127.0.0.1/啦,看到了什么?
恭喜你,你已经进入了神奇的symfony2的世界