安装
CakePHP是简单,易于安装的。最低要求仅需要一个web服务器和一份CAKEPHP的副本代码,。本篇文章将主要介绍Apache的设置(安装和设置非常简单)。CakePHP能运行在各种web服务器上,如nginx LightHTTPD IIS。
要求
- http服务器 ,如Apache,最好拥有mod_rewrite权限,但不是必须的
- PHP 5.6.0或以上(包括PHP 7.2)
- mbstring PHP扩展
- intl PHP扩展
- simplexml PHP扩展
在XAMPP和WAMP中,mbstring 扩展是默认工作的,在XAMPP中,已经包含了intl扩展,你需要在php.ini (php安装目录下)文件中找到extension=php_intl.dll行,然后取消前面的注释,在XAMPP控制面板中重启服务器即可工作。在WAMP中,默认情况下intl扩展是激活的但是不工作,要使其正常工作,你需要到PHP安装目录下(默认目录 C:\wamp\bin\php\php{version}),复制icu开头的dll文件(icu*.dll)到Apache的bin目录下(默认地址C:\wamp\bin\apache\apache{version}\bin),然后重启所有服务,它就能正常工作了
大多数应用都将使用一个数据库引擎,CakePHP支持多个数据库存储引擎
- MySQL(5.5.3或以上)
- MariaDB(5.5或以上)
- PostgreSQL
- Microsoft SQL Server(2008或更高版本)
- SQLite 3
以上数据库的内置驱动程序都需要PDO。请确保安装了正确的PDO扩展
安装 CakePHP
在开始安装之前,请确保你的php版本是最新的
php -v
你最低也应当安装了 PHP 5.6.0 (CLI) 或更高版本。你的 web 服务器的 PHP 版本必须也是 5.6.0 或更高版本,并且应当最好和命令行(CLI)的 PHP 版本相同
安装 Composer
CakePHP使用依赖项管理工具Composer作为官方支持的安装方法
- 在Linux和macOS上安装Composer
- 按照 official Composer documentation 描述的那样运行安装脚本,并遵照指示安装 Composer
- 运行下面的命令,把 composer.phar 文件移动到 path 环境变量中的一个目录中:
mv composer.phar /usr/local/bin/composer
- 在 Windows 上安装 Composer
对于 Windows 系统,你可以从 这里 下载 Composer 的 Windows 安装程序。 Composer 的 Windows 安装程序更多的指示可以参阅 这里 的 README。
创建 CakePHP 项目
现在您已经下载并安装了Composer,现在我们要在my_app_name文件夹中创建一个新的CakePHP应用程序,只需要运行以下命令
php composer.phar create-project --prefer-dist cakephp/app my_app_name
如果你的 Composer 是全局安装的话,执行以下命令:
composer self-update && composer create-project --prefer-dist cakephp/app my_app_name
当 Composer完成了应用程序框架和核心CakePHP库的下载,你就通过Composer安装一个完整的CakePHP应用程序。一定要保留好composer.json和composer.lock和源代码
现在可以访问安装CakePHP应用程序的路径,并查看默认主页。要更改此页面的内容,请编辑 src/Template/Pages/home.ctp。
尽管composer是官方推荐的安装方法,Github上有CakePHP预安装的下载,这些下载包含安装了所有供应商包的应用程序框架,也包括composer.phar,这样你就拥有更深层使用的基础。
CakePHP的最新变化
默认情况下,这是您的应用程序composer.json的样子:
"require": {
"cakephp/cakephp": "3.7.*"
}
每次运行 php composer.phar update命令,你将收到小版本的补丁。你可以替换成 "^3.7"去接受 3.x 的最新的稳定分支。
"require": {
"cakephp/cakephp": "^3.7"
}
如果您想了解CakePHP中最新的未发布的更改,请将dev-master指定为应用程序的Composer.json中的包版本:
"require": {
"cakephp/cakephp": "dev-master"
}
注意,不推荐使用未发布的版本,因为当下一个主要版本发布时,你的程序可能会崩溃。另外,Composer不会缓存开发分支,因此会持续减缓Composer的安装和更新
使用Oven安装
另一种快速安装CakePHP的方法就是Oven,
它是一个简单的PHP脚本,它能检查必要的系统需求,安装CakePHP应用程序框架,并设置开发环境。
安装完成后,您的CakePHP应用程序就可以运行了!
重点:这不是一个部署脚本,它的目的是帮助开发人员第一次安装CakePHP并快速设置开发环境。生产环境应该考虑其他几个因素,比如文件权限、虚拟主机配置等。
权限
CakePHP将tmp目录用于许多不同的操作,例如 模型描述,缓存视图,会话信息。logs目录用于默认的FileLog引擎写入日志文件。
因此,请确保CakePHP安装中的logs、tmp及其所有子目录都可由web服务器用户写入。Composer的安装过程使tmp及其子文件夹具有全局可写性,以便快速启动和运行,但是您可以更新权限以获得更好的安全性,并使它们仅对web服务器用户可写。
一个常见的问题是logs和tmp目录以及子目录必须由web服务器和命令行用户都可写。在UNIX系统上,如果web服务器用户与命令行用户不同,可以在项目中从应用程序目录运行以下命令一次,以确保权限设置正确:
HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1`
setfacl -R -m u:${HTTPDUSER}:rwx tmp
setfacl -R -d -m u:${HTTPDUSER}:rwx tmp
setfacl -R -m u:${HTTPDUSER}:rwx logs
setfacl -R -d -m u:${HTTPDUSER}:rwx logs
为了使用CakePHP控制台工具,您需要确保 bin/cake 文件是可执行的。在*nix或MacOS上,您可以执行:
chmod +x bin/cake
在Windows上,.bat文件应该已经可以执行.如果您使用的是Vagrant或任何其他虚拟化环境,共享文件将于执行权限共享(请参阅您的虚拟环境中有关如何实现此操作的文档)。
不管什么原因,您无法更改bin/cake文件的权限,您可以使用以下命令运行CakePHP控制台:
php bin/cake.php
开发服务器
开发环境的安装对CakePhp来说是很快的,我们使用CakePHP的控制台运行PHP的内置web服务器,使你的应用就可以使用http://host:port访问。你只需在应用目录执行以下命令.
bin/cake server
默认情况下,在不提供任何参数的情况下,你可以通过http://localhost:8765/打开你的应用程序。
如果与本地主机(localhost)或者8765端口冲突的话,你可以通过CakePHP控制台让web服务器运行在特定的主机或者端口上。你可以使以下命令:
bin/cake server -H 192.168.13.37 -p 5673
你可以通过http://192.168.13.37:5673/访问你应用程序。
就是这样!您的CakePHP应用程序已经启动并运行,无需配置web服务器
如果服务器无法从其他主机访问,请尝试bin/cake server -H 0.0.0.0
开发服务器不应该在生产环境中使用。它只是作为一个基本的开发服务器
如果你想将你的应用发布到正式web服务器,您应该将CakePHP安装文件(包括隐藏的文件)移动到web服务器的文档根目录中。然后,将浏览器指向web服务器的文档根目录并查看应用的运行状况。
生产安装
生产安装是CakePHP更加灵活方便的安装方式,使用这种方法可以把整个域名当成一个CakePHP应用。这个例子将帮助你将CakePHP安装在文件系统任何地方并使其能在http://www.example.com访问。注意,此安装可能需要更改Apache web服务器上的DocumentRoot的权限。
按照上述方法将应用程序安装到你选择的目录中后,假设你选了 /cake_install进行安装。你的产品的目录应该是这样的
/cake_install/
bin/
config/
logs/
plugins/
src/
tests/
tmp/
vendor/
webroot/ (this directory is set as DocumentRoot)
.gitignore
.htaccess
.travis.yml
composer.json
index.php
phpunit.xml.dist
README.md
使用Apache开发的人员,应将DocumentRoot指向:
DocumentRoot /cake_install/webroot
如果您的web服务器配置正确,现在应该可以在http://www.example.com上访问CakePHP应用程序。
Fire It Up
好的,让我们看看CakePHP的实际应用。根据你的使用的设置,应该将浏览器指向http://example.com/或http://localhost:8765/。此时,您将看到CakePHP的默认主页,以及一条告诉您当前数据库连接状态的消息。
恭喜你!您已经创建号您的第一个CakePHP应用程序。
URL 重写
Apache
通常情况下, CakePHP 用来和 mod_rewrite 一起使用的,但是我们的确注意到一些用户很难使所有东西顺利地运行在他们的系统上。
这里有些方法让它正常的运行。首先,查看 httpd.conf文件。(确保你是在修 改系统级的 httpd.conf,而不是用户级或者站点级的 httpd.conf)。
这些文件随(发行版本的不同和 Apache 版本的不同)而有所变化。你也可以查看 http://wiki.apache.org/httpd/DistrosDefaultLayout 以获取更多的信息。
- 确保**.htaccess**允许覆盖,并且在正确 DocumentRoot 设置 AllowOverride 为 All。你的修改应类似于:
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
<Directory />
Options FollowSymLinks
AllowOverride All
# Order deny,allow
# Deny from all
</Directory>
- 确保正确加载了 mod_rewrite。你应当看到类似于下面的文字:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
在很多系统中,默认情况下这是被注释掉的,因此你就只需去掉开头的#符号。
做完修改后,重启 Apache,确保设置生效。
验证你的 .htaccess 文件的确在正确的目录中。某些操作系统认为以’.'开头的文件是隐 藏的,因此不会拷贝这些文件。
- 确保你的 CakePHP 拷贝来自官网的下载或者我们的 Git 库,并且通过检查.htaccess 文件来确保正确解压。
CakePHP app 目录(bake 会把它拷贝到你的应用程序的最高一级目录):
CakePHP 的 webroot 目录(bake 会把它拷贝到你的应用程序的 webroot 目录):<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] </IfModule>
如果你的 CakePHP 站点仍有 mod_rewrite 的问题,您可能想尝试修改虚拟主机的设置,在 Ubuntu 系统中,编辑文件/etc/apache2/sites-available/default (其 位置取决于发行版本)。在该文件中,确保 AllowOverride None 改为 AllowOverride All ,所以就是:<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
<Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www> Options FollowSymLinks AllowOverride All Order Allow,Deny Allow from all </Directory>
在 macOS 中,另一个方法是使用 virtualhostx 工具来创建一个虚拟主机 ,指向你的目录。
对于许多托管服务(GoDaddy, 1and1),你的 web 服务器实际上是从一个已经使用 mod_rewrite 的用户目录提供的.如果你把 CakePHP 安装到一个用户目录( http://example.com/~username/cakephp/),或者任何已经使用 mod_rewrite 的网址结构,你需要在 CakePHP 使用的 .htaccess 文件(/.htaccess、/webroot/.htaccess)中添加 RewriteBase 语句。
这可以加在 RewriteEngine 指令所在的同一个小节中,例如,你的 webroot 的 .htaccess 文件可以象这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
这些改动的细节取决于你的设置,而且可能包含与 CakePHP 无关的其它东西。更多信息 请参考 Apache 的在线文档。
- (可选) 要改善生产环境的设置,你应当让 CakePHP 避免解析非法的资源。可以把 webroot 的 .htaccess 文件修改成象下面这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/app/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !^/(webroot/)?(img|css|js)/(.*)$
RewriteRule ^ index.php [L]
</IfModule>
上面的设置就会简单地避免错误的资源被送往 index.php,而显示你的 web 服务器的 404页面。
另外,你可以创建一个匹配的 HTML 404 页面,或者添加 ErrorDocument 指令来使 用 CakePHP 内置的 404 页面:
ErrorDocument 404 /404-not-found
nginx 的友好地址
nginx 不像 Apache 那样使用 .htaccess 文件,所以必须在站点的配置中创建这些重写网址。这通常可以在(/etc/nginx/sites-available/your_virtual_host_conf_file)中找到。
根据你的设置,你要修改这个(配置),不过至少你要让 PHP 作为 FastCGI 实例来运行,以下配置将请求重定向到webroot/index.php:
location / {
try_files $uri $uri/ /index.php?$args;
}
服务器配置示例如下:
server {
listen 80;
listen [::]:80;
server_name www.example.com;
return 301 http://example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public/webroot;
index index.php;
access_log /var/www/example.com/log/access.log;
error_log /var/www/example.com/log/error.log;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
最新的 PHP-FPM 配置设置为监听 unix php-fpm 套接字(socket),而不是 127.0.0.1 地址的 9000 TCP 端口。如果你使用上面的配置,遇到 502 bad gateway 的错误,尝试 把 fastcgi_pass 从 TCP 端口改为套接字路径(例如:fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;)。
IIS7 的网址重写 (Windows 主机)
IIS7 本身不支持 .htaccess 文件。虽然有插件(add-on)可增加这种支持,但是也可以把 htaccess 规则导入 IIS,来使用 CakePHP 的原生重写。为此,按照如下步骤进行:
- 使用 Microsoft 的 Web Platform Installer 来安装 Rewrite Module 2.0 或者直接下载(32位 / 64位)。
- 在 CakePHP 根目录创建一个文件web.config文件。
- 使用记事本(Notepad)或任何对 XML 安全的编辑器,拷贝下面的代码到新建的 web.config 文件中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Exclude direct access to webroot/*"
stopProcessing="true">
<match url="^webroot/(.*)$" ignoreCase="false" />
<action type="None" />
</rule>
<rule name="Rewrite routed access to assets(img, css, files, js, favicon)"
stopProcessing="true">
<match url="^(font|img|css|files|js|favicon.ico)(.*)$" />
<action type="Rewrite" url="webroot/{R:1}{R:2}"
appendQueryString="false" />
</rule>
<rule name="Rewrite requested file/folder to index.php"
stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<action type="Rewrite" url="index.php"
appendQueryString="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
一旦创建了含有正确的 IIS 方式的重写规则的 web.config 文件,CakePHP 的链接、CSS、 JavaScript和路由就应该可以正常工作了。
不能使用网址重写
如果您不想或者不能让mod_rewrite(或者其他兼容的模块)在您的服务器上运行,那么您需要使用CakePHP内置的url。在config /app.php,取消注释这行,看起来像这样:
'App' => [
// ...
// 'baseUrl' => env('SCRIPT_NAME'),
]
同时删除这些 .htaccess 文件
/.htaccess
webroot/.htaccess
这将使你的url看起来像www.example.com/index.php/controllername/actionname/param 而不是 www.example.com/controllername/actionname/param