CakePHP简单易于安装。 最低要求是一个Web服务器和一个CakePHP的副本,就是它! 虽然本章主要关注Apache的设置(因为它很容易安装和设置),CakePHP将运行在各种web服务器上,如nginx,LightHTTPD或Microsoft IIS。
要求
- HTTP服务器。 比如:Apache。 有mod_rewrite是首选,但不是必需的。
- PHP 5.6.0或更高版本(包括PHP 7)。
- mbstring PHP扩展
- intl PHP扩展
▲ 注意:
在XAMPP和WAMP中,mbstring扩展默认工作。
在XAMPP中,包括intl扩展,但是您必须extension=php_intl.dll对php.ini中的 extension=php_intl.dll的注释 ,并通过XAMPP控制面板重新启动服务器。
在WAMP中,intl扩展默认是“激活”,但不工作。 要使它工作,你必须去php文件夹(默认) C:\ wamp \ bin \ php \ php {版本} ,复制所有看起来像icu * .dll的文件 ,并将它们粘贴到apache bin目录C: \ wamp \ bin \ apache \ apache {version} \ bin 。 然后重新启动所有服务,它应该是确定。
虽然不需要数据库引擎,但我们认为大多数应用程序将使用一个。 CakePHP支持各种数据库存储引擎:
- MySQL(5.1.10或更高版本)
- PostgreSQL
- Microsoft SQL Server(2008或更高版本)
- SQLite 3
安装CakePHP
在开始之前,你应该确保你有一个最新的PHP版本:
php -v
你应该至少已经安装了PHP 5.6.0(CLI)或更高版本。 您的网络服务器的PHP版本也必须是5.6.0或更高版本,并且最好是与您的命令行界面(CLI)PHP版本相同的版本。
安装Composer
CakePHP使用Composer ,一个依赖项管理工具,作为正式支持的安装方法。
-
在Linux和macOS上安装Composer
-
按照官方Composer文档中所述运行安装程序脚本,然后按照说明安装Composer。
-
执行以下命令将composer.phar移动到路径中的目录:
-
mv composer.phar /usr/local/bin/composer
-
在Windows上安装Composer
对于Windows系统,您可以在此处下载Composer的Windows安装程序。 Composer的Windows安装程序的更多说明可以在这里的README中找到 。
创建CakePHP项目
现在您已经下载并安装了Composer,假设您想要在my_app_name文件夹中创建一个新的CakePHP应用程序。 为此,只需运行以下composer命令:
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上提供了预安装的下载。 这些下载包含安装了所有供应商包的应用程序框架。 它还包括composer.phar
所以你有一切你需要进一步使用。
保持最新的CakePHP更改
默认情况下,这是你的应用程序composer.json看起来像:
"require": {
"cakephp/cakephp": "3.4.*"
}
每次运行php composer.phar update您将收到此次要版本的修正版本。 你可以改为~3.4 ,也接收3.x分支的最新稳定版本。
如果你想保持最新的未发布的更改在CakePHP指定dev-master作为应用程序的composer.json中的软件包版本:
"require": {
"cakephp/cakephp": "dev-master"
}
请注意,不推荐,因为您的应用程序可能会在下一个主要版本发布时中断。 此外,composer不会缓存开发分支,因此会减慢连续的composer安装/更新速度。
权限
CakePHP使用tmp目录进行许多不同的操作。 模型描述,缓存视图和会话信息仅仅是几个示例。 logs目录用于由默认的FileLog
引擎写入日志文件。
因此,确保目录日志 , tmp及其CakePHP安装中的所有子目录都是可由Web服务器用户写入的。 Composer的安装过程使tmp及其子文件夹全局可写,以便快速启动和运行,但您可以更新权限以获得更好的安全性,并使其只对Web服务器用户可写。
一个常见的问题是, 日志和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服务器。
▲ 注意:开发服务器绝不应在生产环境中使用。 它只是作为一个基本的开发服务器。
如果你更喜欢使用一个真正的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应用程序 。
火起来
好吧,让我们看看CakePHP在行动。 根据您使用的设置,您应该将浏览器指向http://example.com/或http://localhost:8765/ 。 此时,您将看到CakePHP的默认主目录,并显示一条消息,告诉您当前数据库连接的状态。
恭喜! 您已准备好创建您的第一个CakePHP应用程序 。
URL重写
虽然CakePHP被构建为与开箱即用的mod_rewrite一起工作,通常我们注意到,有些用户很难在系统上播放所有内容。
这里有一些东西,你可能会试图让它正常运行。 首先看看你的httpd.conf。 (确保您正在编辑系统httpd.conf,而不是用户或站点特定的httpd.conf。)
这些文件可能因不同的发行版和Apache版本而异。 您还可以查看http://wiki.apache.org/httpd/DistrosDefaultLayout了解更多信息。
1.确保允许.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
# features.
<Directory />
Options FollowSymLinks
AllowOverride All
# Order deny,allow
# Deny from all
</Directory>
2.确保您正确加载mod_rewrite。 你应该会看到:
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
在许多系统中,这些将默认被注释掉,所以你可能只需要删除前面的#符号。
进行更改后,重新启动Apache以确保设置处于活动状态。验证您的.htaccess文件实际上在正确的目录。 某些操作系统会处理以“。”开头的文件。 作为隐藏,因此不会复制它们。
3.确保您的CakePHP副本来自网站或我们的Git存储库的下载部分,并且通过检查.htaccess文件已正确解包。
CakePHP应用程序目录(将通过烘焙复制到应用程序的顶层目录中):
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^$ webroot/ [L]
RewriteRule (.*) webroot/$1 [L]
</IfModule>
CakePHP webroot目录(将通过烘焙复制到应用程序的web根目录):
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
如果您的CakePHP网站仍然有与mod_rewrite的问题,您可能想尝试修改虚拟主机的设置。 在Ubuntu上,编辑文件/ etc / apache2 / sites-available / default (位置取决于分发)。 在此文件中,确保
AllowOverride None
更改为AllowOverride All
,因此您必须:
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order Allow,Deny
Allow from all
</Directory>
在macOS上,另一种解决方案是使用工具virtualhostx使虚拟主机指向您的文件夹。
对于许多托管服务(GoDaddy,1and1),您的Web服务器实际上是从已经使用mod_rewrite的用户目录提供服务。 如果将CakePHP安装到用户目录( http://example.com/~username/cakephp/ )或已经使用mod_rewrite的任何其他URL结构中,则需要向.htaccess文件中添加RewriteBase语句CakePHP使用(.htaccess,webroot / .htaccess)。
这可以添加到与RewriteEngine指令相同的部分,因此,例如,您的webroot .htaccess文件将如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /path/to/app
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
这些更改的详细信息将取决于您的设置,并且可以包括与CakePHP无关的其他内容。 有关详细信息,请参阅Apache的联机文档。
4.(可选)要改进生产设置,应防止无效资产被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,而是显示您的网络服务器的404页面。
此外,您可以创建匹配的HTML 404页面,或通过添加ErrorDocument
指令使用默认的内置CakePHP 404:
ErrorDocument 404 /404-not-found
nginx
nginx不使用像Apache这样的.htaccess文件,所以有必要在站点可用的配置中创建那些重写的URL。 这通常在/etc/nginx/sites-available/your_virtual_host_conf_file
。 根据您的设置,您将必须修改此,但至少,您将需要PHP作为FastCGI实例运行:
server {
listen 80;
server_name www.example.com;
rewrite ^(.*) http://example.com$1 permanent;
}
server {
listen 80;
server_name example.com;
# root directive should be global
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 /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
在一些服务器(像Ubuntu 14.04)上面的配置不会开箱即用,而nginx文档建议一个不同的方法(http://nginx.org/en/docs/http/converting_rewrite_rules.html )。 你可能会尝试以下(你会注意到这也只是一个服务器{}块,而不是两个,虽然如果你想要example.com解决到您的CakePHP应用程序除了www.example.com参考上面的nginx链接):
server {
listen 80;
server_name www.example.com;
rewrite 301 http://www.example.com$request_uri permanent;
# root directive should be global
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 /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
IIS7(Windows主机)
IIS7本身不支持.htaccess文件。 虽然有可以添加此支持的附加组件,您还可以将htaccess规则导入IIS以使用CakePHP的本机重写。 为此,请按照下列步骤操作:
- 使用Microsoft的Web平台安装程序安装URL Rewrite Module 2.0或直接下载( 32位 / 64位 )。
- 在CakePHP根文件夹中创建一个名为web.config的新文件。
- 使用记事本或任何XML安全编辑器,将以下代码复制到新的web.config文件中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=
stopProcessing=>
<match url= ignoreCase= />
<action type= />
</rule>
<rule name=
stopProcessing=>
<match url= />
<action type= url=
appendQueryString= />
</rule>
<rule name=
stopProcessing=>
<match url= ignoreCase= />
<action type= url=
appendQueryString= />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
一旦使用正确的IIS友好的重写规则创建web.config文件,CakePHP的链接,CSS,JavaScript和重新路由应该正常工作。
我不能使用URL重写
如果你不想要或不能得到mod_rewrite(或一些其他兼容模块)并在你的服务器上运行,你需要使用CakePHP内置的漂亮的URL。 在config / app.php中 ,取消注释看起来像这样的行:
'App' => [
// ...
// 'baseUrl' => env('SCRIPT_NAME'),
]
同时删除.htaccess文件:
/.htaccess
webroot/.htaccess
这会使您的网址类似于www.example.com/index.php/controllername/actionname/param,而不是www.example.com/controllername/actionname/param。