标签 php 下的文章

Phalcon 是一个用 C 语言编写的,号称是速度最快、占用资源最少的 PHP 框架。它以一个 PHP 扩展的形式安装,与 CodeIgniter、CakePHP 等框架有显著的不同。

Phalcon 在 Windows 上的安装很简单,只要在官方网站上找到对应 PHP 版本的 DLL,放进 PHP 目录,然后在 php.ini 里加上就行了。但在 Linux 和 Mac 上需要自己编译。

在 Mac 上做 PHP 开发,很多人都用 MAMP。情况比较麻烦,因为除了 MAMP 以外,OS X 还自带了一个 PHP;而且 MAMP 没有自带 PHP 的源码。所以需要一些额外的步骤。

准备编译环境

首先,你得有一个包管理器,比如 Homebrew,用来安装一些工具。另外,还要安装 Xcode 或者只安装它的命令行工具,才能进行编译。

接下来,用 Homebrew安装一些工具:

$ brew install autoconf automake libtool

修改环境变量

现在,如果你在终端使用 PHP,实际上用的是 OS X 自带的那个:

$ which php
/usr/bin/php

修改环境变量,让终端调用 MAMP 里的 PHP:

$ export PATH=/Applications/MAMP/bin/php/php5.6.10/bin:$PATH
$ which php
/Applications/MAMP/bin/php/php5.6.10/bin/php

下载 PHP 源码

php --version 获得 PHP 的版本,然后在 php.net 下载对应的源码包。

$ php --version
PHP 5.6.10 (cli) (built: Jul  6 2015 14:28:54) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies

$ curl http://cn2.php.net/distributions/php-5.6.10.tar.bz2 | tar -xj
$ mkdir /Applications/MAMP/bin/php/php5.6.10/include
$ mv php-5.6.10/ /Applications/MAMP/bin/php/php5.6.10/php
$ cd /Applications/MAMP/bin/php/php5.6.10/php/
$ ./configure

安装 Phalcon

$ curl -L -o cphalcon-master.zip https://github.com/phalcon/cphalcon/archive/master.zip
$ unzip cphalcon-master.zip
$ cd cphalcon-master/build
$ sudo ./install

修改 MAMP PHP 配置文件模板

打开 MAMP,点击 File -> File -> Edit Template -> php 5.6.10 php.ini ,添加如下一行:

extension=phalcon.so

重启服务后,即可通过 phpinfo() 函数看到已安装的 Phalcon 信息。

Phalcon\Mvc\View 为基于 Phalcon 框架的应用提供了 Mvc 模式中的视图层,视图代表了应用程序中的用户界面. 视图通常是在 HTML 文件里嵌入 PHP 代码,这些代码仅仅是用来展示数据。 视图的任务是当应用程序发生请求时,提供数据给 web 浏览器或者其他工具。

集成视图到控制器(Integrating Views with Controllers)

当一个控制器执行完成之后, Phalcon 会自动的调用 View 组件,从 views 目录中查找与执行的 Controller同名的文件夹以及 Action 同名的模板文件,然后填充相应的数据后返回给浏览器,比如:http://localhost/item/view/1,Phalcon会将前面的这个Uri地址映射为:

服务器地址:        localhost
控制器:            item
动作:              view
参数:              1

调度器(Dispatcher)会查找名为 ItemController.php 的控制器文件,该文件中的内容应该如下:

<?php

class ItemController extends \Phalcon\Mvc\Controller {
    
    public function indexAction() {}

    public function showAction($itemId) {
        $item = Item::findFirstById($itemId);
        $this->view->setVar('item', $item);
    }
}

同时,调度器会执行 showAction,并将 1 作为参数传递给该方法,该方法中,$this->view->setVar() 方法向 view 中注入了一个名为 item 的对象,该对象的值为 $item,然后我们即可以在:/path/to/views/item/show.phtml 模板文件中以 $item 调用该对象的值或者方法。

作为PHP C拓展形式的Phalcon,需要一个略微不同于传统php的库或框架的安装方法。你可以选择一个当前系统的一个二进制包下载,或者使用源代码构建它。

Phalcon 可编译在PHP 5.3.1及以上版本,但是因为老PHP版本错误导致内存泄漏,官方强烈推荐你使用PHP 5.3.11或更高版本。

PHP 5.3.9版本以前有几个安全漏洞,不建议在生产网站中使用。点击学习更多

在 Windows 上安装 Phalcon

要在Windows上使用Phalcon,你可以下载一个DLL库。编辑php.ini文件,并且在最后附加上:

extension=php_phalcon.dll

重启你的Web服务器。

在 XAMPP 下安装 Phalcon PHP

XAMPP是一个易于安装的Apache发行版,其中包含MySQL、PHP和Perl。仅仅需要下载并启动安装程序。但是需要注册的是,XAMPP 总是只发行 32 位的版本,所以,您同样需要下载 32 位版本的 Phalcon。您可以从下面的网址中下载正确的 Phalcon:

下载完成之后,解压下载得到的压缩包,此时您可以得到一个名为 php_phalcon.dll 的文件,将该文件移动至 path\to\xampp\php\ext 目录下,之后打开 \path\to\xampp\php\php.ini 文件,在该文件的最末尾加上下面这一行:

extension=php_phalcon.dll

然后通过 xampp 控制面板重启 apache 服务器即可完成安装,此时打开 http://localhost ,查看 phpinfo 信息即可看到,PHPINFO 信息中已经存在了 Phalcon 章节。这表示 Phalcon 已经安装成功。

在 WAMP 中安装 Phalcon

在 WAMP 中安装Phalcon 与在 XAMPP 中安装类似,只是需要注意几个目录位置是不同的,PHP的扩展库目录为:\path\to\wamp\bin\php\phpVERSION\etx\php.ini 的目录是 \patho\to\wamp\apache\ApacheVERSION\bin\php.ini,在上面的两个目录地址中,需要将 VERSION 替换为相应软件的版本号。

在 Linux/Solaris/Mac 下安装

在Linux/Solaris/Mac系统下,你能很轻易从源代码编译和安装这个拓展:

基本要求(Requirements)¶

必要的包:

  • PHP 5.3.x/5.4.x/5.5.x development resources
  • GCC compiler (Linux/Solaris) or Xcode (Mac)
  • Git (如果不是已经安装在你的系统,且你没有从Github上下载这个包并通过FTP/SFTP上传到你的服务器上)

通用平台下安装指定的软件包:

#Ubuntu
sudo apt-get install gcc make git-core libpcre3-dev php5-dev

#Suse
sudo yast -i gcc make php5-devel
#or
sudo zypper install gcc make php5-devel

#CentOS/Fedora/RHEL
sudo yum install git gcc make pcre-devel php-devel

#Solaris
pkg install gcc-45 php-53 apache-php53

编译

创建扩展:

git clone git://github.com/phalcon/cphalcon.git
cd cphalcon/build
sudo ./install

添加扩展到你的php配置文件:

#Ubuntu: Add this line in your php.ini
extension=phalcon.so

#Centos/RedHat: Add a file called phalcon.ini in /etc/php.d/ with this content:
extension=phalcon.so

重启Web服务器.

Phalcon自动检测你的系统架构,然而,您可以强制编译为一个特定的架构:

sudo ./install 32bits
sudo ./install 64bits
sudo ./install safe

在 FreeBSD 上安装

对于FreeBSD,仅仅只需要简单的命令进行安装:

pkg_add -r phalcon

或者

export CFLAGS="-O2 -fno-delete-null-pointer-checks"
cd /usr/ports/www/phalcon && make install clean

Nginx、MySQL 与 PHP 可以联合使用成为一个强大的动态内容服务器,这三者在不同的系统上面有不同的名称,本文所要讲解的是如何在 FreeBSD 上面搭建该环境,我们称之为 FEMP。我所使用的 FreeBSD 版本为 10.1。

第一步:安装这些软件

使用下面的命令即可完成软件的安装:

sudo pkg install nginx mysql56-server php56 php56-mysql

在安装完成之后,若您使用的是系统默认的 tcsh ,我们需要立即运行 rehash 命令。

添加第三方软件源

PHP-FPM 在 CentOS 的官方程序库中不存在,所以我们首先得添加第三方扩展软件源。

rpm --import https://fedoraproject.org/static/0608B895.txt 
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

yum install yum-priorities

然后编辑:vi /etc/yum.repos.d/epel.repo

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://mirrors.aliyun.com/epel/6/$basearch
        http://mirrors.aliyuncs.com/epel/6/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

接着:vi /etc/yum.repos.d/remi.repo

[remi]
name=Les RPM de remi pour Enterprise Linux 6 - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/6/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

安装 Nginx、MySQL以及PHP

#安装MySQL服务器
yum install mysql mysql-server

#安装Nginx
yum install nginx

#安装PHP及相关组件
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy php-pecl-apc

待所有安装结束后,使用以下命令启动服务:

#启动MySQL
chkconfig --levels 235 mysqld on
service mysqld start

#启动Nginx
chkconfig --levels 235 nginx on
service nginx start

#启动PHP-FPM
chkconfig --levels 235 php-fpm on
service php-fpm start

若 Nginx 启动失败,则有可能是因为 Apache httpd 服务占用了该接口,这时,要么我们修改 Nginx 的坚挺端口,要么修改Apache httpd的或者直接删除 Apache httpd。

apachectl stop
yum remove httpd
chkconfig --level 235 httpd off

配置Nginx、MySQL与PHP-FPM

运行 mysql_secure_installation 命令,提升 MySQL 服务器的安全性,要求您要输入数据库 root 帐户密码,若您是新安装,则直接回车即可,接着立马设置新密码。

配置 PHP

打开 PHP 配置文件:vi /etc/php.ini

设置 cgi.fix_pathinfo=0

[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=0
[...]

设置 upload_max_filesize 最大文件上传尺寸为 upload_max_filesize16MB

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 16M

设置 post_max_size32MB

; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 32M

打开:vi /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000
listen = /var/run/php-fpm.sock;

以及:

listen.owner = www
listen.group = www
listen.mode = 0660

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = www
; RPM: Keep a group allowed to write in log dir.
group = www

最近越来越发现自己变懒了,没有以前那么强的追根问底的勇气了,最近这几个月腾讯云一直在做活动,三折起,我买了两台服务器,配置也还不错,最高的配置的那一台现在是做为公司的备用服务器在使用,而还有一个配置稍低一些的,则做自己的个人使用了,对于个人这一台,我最开始是安装的SUSE作为服务器操作系统,然后,发现软件版本的各种老啊,如果是以前的话,可能我会通宵达旦地把这软件给升级咯,可是现在却选择了一个更简单的方法,把SUSE换成了CentOS,然后同样的问题出现了,然后,我又回到了Ubuntu的怀抱。

从各种网站上面是各种搜索,只是为了想知道,到底CentOS、Suse与Ubuntu哪一个发行版做服务器更好,最后的结果是没有人能告诉我一个确切的答案,公说公有理,婆说婆有理,索性,咱回到业务的出发点,不就是为了要一台服务器么,只要能实现我的需求,那就行,然后在各种比较之后,我还是选择了最易用的Ubuntu 12.04 LTS,然后,再一次开始这个环境的安装与配置。

安装 Nginx、MySQL、PHP

如果想运行最新版本的Nginx(版本一般会高于Ubuntu官方的),需要先运行下面两行命令:

aptitude install python-software-properties
add-apt-repository ppa:nginx/stable

直接运行下面整段命令即可完成所有必须软件的安装,对于PHP,我还安装了一些功能库:

apt-get update
apt-get upgrade
apt-get install nginx mysql-client mysql-server memcached php5-common php5-dev php5-cgi php5-fpm php-apc php5-mysql php5-pgsql php5-sqlite php5-curl php5-gd php5-intl php-pear php5-mcrypt php5-memcache php5-ming php5-recode php5-tidy php5-xmlrpc php5-xsl php5-mcrypt php5-imap
注意:安装过程中,需要输入 MySQL 服务器 root 用户的密码。

安装完成之后,各服务就会自动启动了,直接访问服务器的IP即可访问,各配置文件分别保存在:

  • /etc/php5/fpm/php.ini
  • /etc/nginx/

这些目录下。

建议

  1. 将PHP-FPM 默认监听的 127.0.0.1:9000 改成了 /var/run/php5-fpm.sock,改了之后,需要把 nginx.conf 添加以下代码片段:

    upstream php {

      server unix:/var/run/php5-fpm.sock;

    }

  2. 我的 nginx 虚拟机路径都被设置为 /home/www/PRIMARY_DOMAIN_NAME/public ,需要把 PRIMARY_DOMAIN_NAME 修改成为虚拟主机主域名。

本文将告诉你如何使用 HomeBrew 在Mac OS X上安装 PHP、MySQL与Nginx环境。

安装 PHP5.6 (带FPM)

搜索 PHP FormulasFormulas 就像 Apititude 里面的包一样)。

brew search php

这会返回一个很长的列表,包括了 5.2/5.3/5.4/5.5/5.6 等等的,我们这里就安装最新版本的 5.6

brew tap josegonzalez/php
brew tap homebrew/dupes

这里需要注意,如果你不安装 homebrew/dupes,你将得到下面这样的错误信息:

   `No available formula for zlib.`

在安装 PHP 5.6 之前,我们可以先看看它的安装配置,使用下面这个命令:

brew options php56

我们再按下面这个配置安装它:

brew install php56 --with-fpm --with-imap --without-apache --with-debug

在一个很漫长的等待之后,我们可以使用 php -vphp-fpm -v 来查看安装是否成功以及安装的软件的版本。

添加 PHP-FPM 为系统启动项

你可以在 /usr/local/Cellar/php56/ 目录中查看其 plist 文件。

安装 MySQL

使用下面命令安装

brew install mysql --enable-debug

安装完成之后使用下面命令进行一次MySQL 的安装设置:

mysql_secure_installation

安装 Nginx

brew install nginx

一直都是一个忠实的Drupal用户,不过最近这大半年因为公司太忙,所以也完全没有时间来关注Drupal的发展,不过今天因为一个项目的原因,得用一下Drupal,所以上官网看了一下,官网直接来了一条消息(也不知道是不是已经发出来很久了)——Drupal 8就要到来了,立马去看了一下,已经到了Alpha 7了,真快啊,赶紧下载下来瞧瞧。

QQ20131230-4.png

还记得很久以前测试的时候,Drupal 8 还一大堆的问题,现在居然可以直接使用了(我是一直都是使用最新版本软件的人,从来不会考虑什么兼容问题的)。