GY的实验室 - Phalcon+Nginx+PHP-FPM环境搭建

妙玉
• 阅读 10708

Phalcon简介

由于半路出家的缘故,没用过几个PHP框架,第一个了解的框架是公司自己的,然后又试着用了Yii,CI。在读了CSDN在某度的高排名翻译文章(PHP开发框架流行度排名:Laravel居首)后,看了Laravel的皮毛。不得不说Laravel的文档真是漂亮,但是作为一个后台程序开发者,总觉得也不是自己想要的。

框架的作用:前后端代码解耦;数据库操作封装;内置通用程序模块(比如路由、认证、加密等);

虽然整个网站中,框架性能并非主要因素,但是还是想把它发挥到极致,只能说是程序员的理想主义在作祟啦。
phalcon就是这种框架。PHP框架这么一个直接跟业务代码打交道的东西,都用本地化语言编写,够Geek。事实上,虽说框架只是提供代码调度和封装,其本身的性能也不容忽视。

本地化语言:就是可以编译成机器码(那种可以直接跑在本机CPU上的代码啦)的语言,C/C++/Obj-C, ASM这种的。优点是执行起来快快快,且有些硬件API,也许只有C接口,因此较解释型语言更适合嵌入式领域,缺点是需重新编译才能实现跨平台,且同样的功能,开发起来复杂度比脚本和Java要高

1. Ubuntu编译

Phalcon的方式是通过PHP扩展,将框架代码编译进去,使得编译后的php命令支持一些框架类和依赖注入。编译非常简单

#下载安装依赖库
sudo apt-get install php5-dev libpcre3-dev gcc make php5-mysql php5-fpm 
 #下载git库
git clone --depth=1 git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install
#增加/etc/php5/fpm/conf.d/30-phalcon.ini
sudo echo 'extension=phalcon.so' > /etc/php5/fpm/conf.d/30-phalcon.ini
#增加/etc/php5/cli/conf.d/30-phalcon.ini
sudo echo 'extension=phalcon.so' > /etc/php5/cli/conf.d/30-phalcon.ini

2. 检查php扩展

现在检查下安装是否成功。

php -r 'echo phpinfo();' | grep -i phalcon

如果输出下面这样算作成功

/etc/php5/cli/conf.d/30-phalcon.ini
phalcon
Phalcon Framework => enabled
Phalcon Version => 1.3.4
phalcon.db.escape_identifiers => On => On
phalcon.orm.column_renaming => On => On
phalcon.orm.enable_literals => On => On
phalcon.orm.events => On => On
phalcon.orm.exception_on_failed_save => Off => Off
phalcon.orm.not_null_validations => On => On
phalcon.orm.virtual_foreign_keys => On => On
phalcon.register_psr3_classes => Off => Off

也可以通过下面这种方式检测:

php -r 'echo print_r(get_loaded_extensions());'

如果输出下面这样算作成功

Array
(
    [0] => Core
    [1] => date
    [2] => ereg
    [3] => libxml
    [4] => openssl
    ...

3. Nginx配置

Nginx的安装略去

配置修改:修改/etc/nginx/site-avaliable/default 或 /etc/nginx/conf.d/default,取决于/etc/nginx/nginx.conf的配置和个人喜好

这里为了测试,在default文件中配置了两个域名,共用8080端口

server {
    listen   8080 default_server;
    server_name ~^(.+)$;
    index index.php index.html index.htm;
    set $root_path '/srv/www/htdocs/phalcon-website/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;
    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }
    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root $root_path;
    }
    location ~ /\.ht {
        deny all;
    }
    location ~ \.php$ {
        fastcgi_index /index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;

        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    }
}
server {
    listen   8080;
    #这里在测试时用store_server域名,本机需要绑定hosts才能解析
    server_name store_server;
    index index.php index.html index.htm;
    set $root_path '/srv/www/htdocs/store/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;
    location @rewrite {
        rewrite ^/(.*)$ /index.php?_url=/$1;
    }
    location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
        root $root_path;
    }
    location ~ /\.ht {
        deny all;
    }
    location ~ \.php$ {
        fastcgi_index /index.php;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

4. phalcon-devtools安装

这个是phalcon的脚手架工具,支持一组命令,能够为您自动生成代码。

git clone git://github.com/phalcon/phalcon-devtools.git
cd phalcon-devtools/ && sudo ln -s ~/devtools/phalcon.php /usr/bin/phalcon

然后执行phalcon commands,会出现命令提示

Phalcon DevTools (1.3.4)

Available commands:
  commands (alias of: list, enumerate)
  controller (alias of: create-controller)
  model (alias of: create-model)
  all-models (alias of: create-all-models)
  project (alias of: create-project)
  scaffold
  migration
  webtools

执行create-project就能生成一套框架代码啦!

cd /srv/www/htdocs/ && phalcon create-project store

5. 启动服务器

终于到了一个兴奋点了,哈哈

#重启fpm和nginx
sudo service php5-fpm restart
sudo service nginx restart

然后本机绑定host: store_server,在浏览器栏输入store_server:8080,就能看到大大的Congratulations了!

6. 服务器虚拟用户名修改

期间可能会遇到权限问题,原因是无论nginx创建子进程,还是php5-fpm创建子进程,用得都是www-data的用户名和群组。
要修改默认值,赋值为自定义的值。请分别修改/etc/nginx/nginx.conf和/etc/php5/fpm/pool.d/www.conf的user和group


至此,环境搭建完毕,接下来去探索Phalcon的各种内部机制吧!

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
PhoneGap设置Icon
参考:http://cordova.apache.org/docs/en/latest/config\_ref/images.html通过config.xml中的<icon标签来设置Icon<iconsrc"res/ios/icon.png"platform"ios"width"57"height"57"densi
Wesley13 Wesley13
3年前
Monolog 优化及打造 ELK 友好的日志格式
Monolog(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2FSeldaek%2Fmonolog)是目前最流行的php日志库,许多流行的php框架都用Monolog作为默认的日志库,例如symfony、laravel。默认情况下,symfony、lara
Stella981 Stella981
3年前
Laravel
​原文作者:TaylorOtwell(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Ftaylorotwell)网上偶得此书,是Laravel的作者写的。Laravel是近年来优秀的PHP框架,国内外都有很多支持者。该框架应用了大量PHP5
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
PHP+jQuery寥寥几行代码轻松实现百度搜索那样的无刷新PJAX的分页列表和导航链接
!(https://static.oschina.net/uploads/space/2016/1208/171419_U00R_561214.png)PHP寥寥几行代码轻松实现百度搜索那样的分页列表和导航链接,某些语言的拥趸哭晕在厕所.<?php$apparray('db_prefix''
钟馗 钟馗
1年前