运行您的应用程序
CodeIgniter 4 应用程序可以通过多种方式运行:托管在 Web 服务器上、使用虚拟化或使用 CodeIgniter 的命令行工具进行测试。本节介绍如何使用每种技术,并解释其中的一些优缺点。
重要
您应该始终注意文件名的大小写。许多开发人员在 Windows 或 macOS 上的区分大小写文件系统上进行开发。但是,大多数服务器环境使用区分大小写文件系统。如果文件名大小写不正确,在本地工作的代码在服务器上将无法工作。
如果您是 CodeIgniter 的新手,请阅读用户指南的 入门 部分,开始学习如何构建动态 PHP 应用程序。尽情享受!
初始配置
配置您的网站 URI
使用文本编辑器打开 app/Config/App.php 文件。
- $baseURL
将您的基本 URL 设置为
$baseURL
。如果您需要更多灵活性,可以在 .env 文件中将 baseURL 设置为app.baseURL = 'http://example.com/'
。始终在您的基本 URL 上使用尾部斜杠!注意
如果您没有正确设置
baseURL
,在开发模式下,调试工具栏可能无法正常加载,网页显示速度可能明显变慢。
- $indexPage
如果您不想在您的网站 URI 中包含 index.php,请将
$indexPage
设置为''
。该设置将在框架生成您的网站 URI 时使用。注意
您可能需要配置您的 Web 服务器,以便使用不包含 index.php 的 URL 访问您的网站。请参阅 CodeIgniter URL。
配置数据库连接设置
如果您打算使用数据库,请使用文本编辑器打开 app/Config/Database.php 文件,并设置您的数据库设置。或者,也可以在您的 .env 文件中设置这些设置。
设置为开发模式
如果不在生产服务器上,请在 .env 文件中将 CI_ENVIRONMENT
设置为 development
,以利用提供的调试工具。请参阅 设置开发模式 以了解详细信息。
重要
在生产环境中,您应该禁用错误显示和任何其他仅供开发的功能。在 CodeIgniter 中,这可以通过将环境设置为“production”来实现。默认情况下,应用程序将使用“production”环境运行。另请参见 ENVIRONMENT 常量。
设置可写文件夹权限
如果您将使用 Web 服务器(例如 Apache 或 nginx)运行您的网站,则需要修改项目中 writable 文件夹的权限,以便 Web 服务器使用的用户或帐户可以写入该文件夹。
本地开发服务器
CodeIgniter 4 带有一个本地开发服务器,利用 PHP 的内置 Web 服务器和 CodeIgniter 路由。您可以在主目录中使用以下命令行启动它
php spark serve
这将启动服务器,您现在可以在浏览器中访问 http://localhost:8080 查看您的应用程序。
注意
内置开发服务器仅应在本地开发机器上使用。它绝不应在生产服务器上使用。
如果您需要在除 localhost 之外的其他主机上运行网站,则首先需要将主机添加到您的 hosts 文件中。该文件的确切位置在每个主要操作系统中都不同,但所有类 Unix 系统(包括 macOS)通常都会将该文件保存在 /etc/hosts 中。
本地开发服务器可以使用三个命令行选项进行自定义
您可以使用
--host
CLI 选项指定运行应用程序的不同主机php spark serve --host example.dev
默认情况下,服务器在端口 8080 上运行,但您可能有多个网站正在运行,或者已经有一个应用程序使用该端口。您可以使用
--port
CLI 选项指定不同的端口php spark serve --port 8081
您还可以使用
--php
CLI 选项指定要使用的特定版本的 PHP,其值设置为要使用的 PHP 可执行文件的路径php spark serve --php /usr/bin/php7.6.5.4
使用 Apache 托管
CodeIgniter4 Web 应用程序通常托管在 Web 服务器上。Apache HTTP Server 是“标准”平台,并在我们的许多文档中被假设。
Apache 与许多平台捆绑在一起,但也可以从 Bitnami 下载与数据库引擎和 PHP 捆绑在一起的软件包。
配置主配置文件
启用 mod_rewrite
“mod_rewrite” 模块允许 URL 中不包含 “index.php”,并且在我们的用户指南中假设了这一点。
确保在主配置文件中启用了(未注释)重写模块,例如,apache2/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
设置文档根目录
还要确保默认文档根目录的 <Directory>
元素在 AllowOverride
设置中也启用了它。
<Directory "/opt/lamp/apache2/htdocs">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
使用虚拟主机托管
我们建议使用“虚拟主机”来运行您的应用程序。您可以为每个应用程序设置不同的别名。
启用 vhost_alias_module
确保在主配置文件中启用了(未注释)虚拟主机模块,例如,apache2/conf/httpd.conf
LoadModule vhost_alias_module modules/mod_vhost_alias.so
添加主机别名
在您的“hosts”文件中添加一个主机别名,通常在类 Unix 平台上为 /etc/hosts,在 Windows 上为 c:WindowsSystem32driversetchosts。
在文件中添加一行。例如,可以是 myproject.local
或 myproject.test
127.0.0.1 myproject.local
设置虚拟主机
在虚拟主机配置中为您的 Web 应用程序添加一个 <VirtualHost>
元素,例如,apache2/conf/extra/httpd-vhost.conf
<VirtualHost *:80>
DocumentRoot "/opt/lamp/apache2/myproject/public"
ServerName myproject.local
ErrorLog "logs/myproject-error_log"
CustomLog "logs/myproject-access_log" common
<Directory "/opt/lamp/apache2/myproject/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
以上配置假设项目文件夹位于以下位置
apache2/
├── myproject/ (Project Folder)
│ └── public/ (DocumentRoot for myproject.local)
└── htdocs/
重启 Apache。
测试
使用上述配置,您可以在浏览器中使用 URL http://myproject.local/ 访问您的 Web 应用程序。
每次更改 Apache 配置后,都需要重新启动 Apache。
使用子文件夹托管
如果您想要使用子文件夹创建类似 http://localhost/myproject/ 的 baseURL,有三种方法。
创建符号链接
将您的项目文件夹放置如下,其中 htdocs 是 Apache 文档根目录
├── myproject/ (project folder)
│ └── public/
└── htdocs/
导航到 htdocs 文件夹并创建符号链接,如下所示
cd htdocs/
ln -s ../myproject/public/ myproject
使用别名
将您的项目文件夹放置如下,其中 htdocs 是 Apache 文档根目录
├── myproject/ (project folder)
│ └── public/
└── htdocs/
在主配置文件中添加以下内容,例如 apache2/conf/httpd.conf
Alias /myproject /opt/lamp/apache2/myproject/public
<Directory "/opt/lamp/apache2/myproject/public">
AllowOverride All
Require all granted
</Directory>
重启 Apache。
添加 .htaccess
最后一种方法是在项目根目录中添加 .htaccess 文件。
不建议将项目文件夹放置在文档根目录中。但是,如果您别无选择,例如在共享服务器上,您可以使用此方法。
将您的项目文件夹放置如下,其中 htdocs 是 Apache 文档根目录,并创建 .htaccess 文件
└── htdocs/
└── myproject/ (project folder)
├── .htaccess
└── public/
并编辑 .htaccess 文件,如下所示
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
<FilesMatch "^\.">
Require all denied
Satisfy All
</FilesMatch>
删除 index.php
参见 CodeIgniter URL.
设置环境
参见 处理多个环境.
使用 nginx 托管
nginx 是 Web 托管中使用最广泛的第二大 HTTP 服务器。在这里,您可以找到在 Ubuntu Server 下使用 PHP 8.1 FPM(unix 套接字)的示例配置。
default.conf
此配置允许 URL 中没有“index.php”,并使用 CodeIgniter 的“404 - 文件未找到”来处理以“.php”结尾的 URL。
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/example.com/public;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php-fpm:
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
# With php-cgi:
# fastcgi_pass 127.0.0.1:9000;
}
error_page 404 /index.php;
# deny access to hidden files such as .htaccess
location ~ /\. {
deny all;
}
}
设置环境
参见 处理多个环境.
引导应用程序
在某些情况下,您需要加载框架,而无需实际运行整个应用程序。这对于对项目进行单元测试特别有用,但对于使用第三方工具分析和修改代码也很有用。该框架附带一个单独的引导脚本,专门用于这种情况:**system/Test/bootstrap.php**。
您项目的大多数路径是在引导过程中定义的。您可以使用预定义的常量来覆盖这些路径,但在使用默认值时,请确保您的路径与安装方法的预期目录结构一致。