环境:XAMPP for Linux 1.8.3(php5.5.3 Apache/2.4.4) CentOS6 x86_64
ZF2.2.5
ZendSkeletonApplication-zf-release-2.1.0-83
1 下载并安装XAMPP
2 下载ZendSkeletonApplication
3 使用命令安装
3.1 解压到你所要的的目录,这里使用的是文档中用的文件名zf2-turorial
3.2 目录要apache能够有权限访问到,这里放到htdocs目录下
一般要给权限755
3.3 创建虚拟主机
这里参照文档中的配置:
<VirtualHost *:80>
ServerName zf2-tutorial.localhost
DocumentRoot /path/to/zf2-tutorial/public
SetEnv APPLICATION_ENV "development"
<Directory /path/to/zf2-tutorial/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
3.4 参照文档,执行命令
然后install进行安装时,检查依赖后,会下载ZendFrameworkphp composer.phar self-update php composer.phar install
3.5 在此过程中
self-update更新的composer.phar,更多信息参照composer.phar文档
查看vendor目录可以看到,目录下多了zendframework、bin、composer、autoload.php
具体它是怎么找到zf2 的大家查一下文档。
3.6 运行
4 手动安装
这里不使用命令安装,把ZF2解压到外面,看vendor下面的说明意思是第三方库一般放在vendor下面。
README.md
This vendor/ directory is where third-party modules should be installed.
这里放在了网站外面。这时就要手动 指定ZF2所在的位置。
根据文档设定include_path和环境变量。
4.1 include_path在php.ini中设定
4.2 环境变量可以在apache的虚拟主机中使用SetEnv设定,也可以在操作系统中设定,如系统级的/etc/profile等linux下设定环境变量的方法。
<VirtualHost *:80>
ServerName zf2-tutorial.localhost
DocumentRoot /path/to/zf2-tutorial/public
SetEnv ZF2_PATH "/path/to/ZF2/library"
SetEnv APPLICATION_ENV "development"
<Directory /path/to/zf2-tutorial/public>
DirectoryIndex index.php
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
4.3 重启apache 并运行
这里可以看一下init_autoloader.php是如何查找ZF2的
if (file_exists('vendor/autoload.php')) {
$loader = include 'vendor/autoload.php';
}
$zf2Path = false;
if (is_dir('vendor/ZF2/library')) {
$zf2Path = 'vendor/ZF2/library';
} elseif (getenv('ZF2_PATH')) { // Support for ZF2_PATH environment variable or git submodule
$zf2Path = getenv('ZF2_PATH');
} elseif (get_cfg_var('zf2_path')) { // Support for zf2_path directive value
$zf2Path = get_cfg_var('zf2_path');
}
if ($zf2Path) {
if (isset($loader)) {
$loader->add('Zend', $zf2Path);
} else {
include $zf2Path . '/Zend/Loader/AutoloaderFactory.php';
Zend\Loader\AutoloaderFactory::factory(array(
'Zend\Loader\StandardAutoloader' => array(
'autoregister_zf' => true
)
));
}
}
if (!class_exists('Zend\Loader\AutoloaderFactory')) {
throw new RuntimeException('Unable to load ZF2. Run `php composer.phar install` or define a ZF2_PATH environment variable.');
}
上面的if else语句标示了不使用命令手动配置查找ZF2的过程。
注意:安装过程注意查看文档,和所下载包里面的INSTALL README等说明文件。
至此手动安装(vendor下不含zendframework)的程序的目录结构如下:
zf2-tutorial2
|-- composer.json
|-- composer.phar
|-- config
| |-- application.config.php
| `-- autoload
| |-- global.php
| |-- local.php.dist
| `-- README.md
|-- data
| `-- cache
|-- init_autoloader.php
|-- LICENSE.txt
|-- module
| `-- Application
| |-- config
| | `-- module.config.php
| |-- language
| | |-- ar_JO.mo
| | |-- ar_JO.po
| | |-- ar_SY.mo
| | |-- ar_SY.po
| | |-- cs_CZ.mo
| | |-- cs_CZ.po
| | |-- de_DE.mo
| | |-- de_DE.po
| | |-- en_US.mo
| | |-- en_US.po
| | |-- es_ES.mo
| | |-- es_ES.po
| | |-- fr_CA.mo
| | |-- fr_CA.po
| | |-- fr_FR.mo
| | |-- fr_FR.po
| | |-- it_IT.mo
| | |-- it_IT.po
| | |-- ja_JP.mo
| | |-- ja_JP.po
| | |-- nb_NO.mo
| | |-- nb_NO.po
| | |-- nl_NL.mo
| | |-- nl_NL.po
| | |-- pl_PL.mo
| | |-- pl_PL.po
| | |-- pt_BR.mo
| | |-- pt_BR.po
| | |-- ru_RU.mo
| | |-- ru_RU.po
| | |-- sl_SI.mo
| | |-- sl_SI.po
| | |-- tr_TR.mo
| | |-- tr_TR.po
| | |-- zh_CN.mo
| | |-- zh_CN.po
| | |-- zh_TW.mo
| | `-- zh_TW.po
| |-- Module.php
| |-- src
| | `-- Application
| | `-- Controller
| | `-- IndexController.php
| `-- view
| |-- application
| | `-- index
| | `-- index.phtml
| |-- error
| | |-- 404.phtml
| | `-- index.phtml
| `-- layout
| `-- layout.phtml
|-- public
| |-- css
| | |-- bootstrap.css
| | |-- bootstrap.min.css
| | |-- bootstrap-theme.css
| | |-- bootstrap-theme.min.css
| | `-- style.css
| |-- fonts
| | |-- glyphicons-halflings-regular.eot
| | |-- glyphicons-halflings-regular.svg
| | |-- glyphicons-halflings-regular.ttf
| | `-- glyphicons-halflings-regular.woff
| |-- img
| | |-- favicon.ico
| | `-- zf2-logo.png
| |-- index.php
| `-- js
| |-- bootstrap.js
| |-- bootstrap.min.js
| |-- html5shiv.js
| |-- jquery-1.10.2.min.map
| |-- jquery.min.js
| `-- respond.min.js
|-- README.md
`-- vendor
|-- README.md
`-- ZF2
完。
续:安装ZFTOOL
手动安装,下载并解压,根据文档[1][2]我放到vendor目录下。
.
|-- apache2
|-- bin
|-- build
|-- cgi-bin
|-- docs
|-- error
|-- etc
|-- htdocs
| |-- conf
| |-- xampp
| `-- zf2-tutorial2
|-- icons
|-- img
|-- include
|-- info
|-- lib
|-- libexec
|-- licenses
|-- logs
|-- man
|-- manual
|-- modules
|-- mysql
|-- pear
|-- php
|-- phpmyadmin
|-- proftpd
|-- sbin
|-- share
|-- temp
|-- var
`-- ZendFramework225
|-- bin
|-- library
| `-- Zend
`-- resources
查看zf.php为可执行文件。
在vendor下运行。zf.php version 出现了两个问题。第一个是找不到ZF,另外是找不到autoload.php。
对于ZF,上面设置ZF2_PATH是在apache配置文件中设置的,所以使用apache访问页面没问题。但是ZFTOOL却访问不到。
另外,看一下zf.php.
$basePath = getcwd();
ini_set('user_agent', 'ZFTool - Zend Framework 2 command line tool');
// load autoloader
if (file_exists("$basePath/vendor/autoload.php")) {
require_once "$basePath/vendor/autoload.php";
} elseif (file_exists("$basePath/init_autoload.php")) {
require_once "$basePath/init_autoload.php";
} elseif (\Phar::running()) {
require_once __DIR__ . '/vendor/autoload.php';
} else {
echo 'Error: I cannot find the autoloader of the application.' . PHP_EOL;
echo "Check if $basePath contains a valid ZF2 application." . PHP_EOL;
exit(2);
}
寻找的是当前目录下的autoload.php和init_autoload.php。我上面的程序是手动安装的,根目录下只有init_autoloader.php。
所以要解决这两个问题,
首先修改init_autoload.php为init_autoloader.php
其次设置环境变量。我这里没有设置系统的环境变量,而是在init_autoloader.php里设置环境变量。这样ZFTOOL在访问init_autoloader.php的时候就执行了添加了环境变量。
putenv("ZF2_PATH=/opt/lampp/ZendFramework225/library");
第三,在zf2-tutorial2根目录下运行zf.php,我这里使用绝对路径
/opt/lampp/bin/php /opt/lampp/htdocs/zf2-tutorial2/vendor/ZFTool/zf.php version
结果:
ZFTool - Zend Framework 2 command line Tool
The application in this folder is using Zend Framework 2.2.5
完。
参照:
http://framework.zend.com/manual/2.0/en/ref/installation.html
http://framework.zend.com/manual/2.0/en/user-guide/skeleton-application.html