运行您的应用程序

CodeIgniter 4 应用程序可以通过多种方式运行:托管在 Web 服务器上、使用虚拟化或使用 CodeIgniter 的命令行工具进行测试。本节介绍如何使用每种技术,并解释其中的一些优缺点。

重要

您应该始终注意文件名的大小写。许多开发人员在 Windows 或 macOS 上的区分大小写文件系统上进行开发。但是,大多数服务器环境使用区分大小写文件系统。如果文件名大小写不正确,在本地工作的代码在服务器上将无法工作。

如果您是 CodeIgniter 的新手,请阅读用户指南的 入门 部分,开始学习如何构建动态 PHP 应用程序。尽情享受!

初始配置

配置您的网站 URI

使用文本编辑器打开 app/Config/App.php 文件。

  1. $baseURL

    将您的基本 URL 设置为 $baseURL。如果您需要更多灵活性,可以在 .env 文件中将 baseURL 设置为 app.baseURL = 'http://example.com/'始终在您的基本 URL 上使用尾部斜杠!

    注意

    如果您没有正确设置 baseURL,在开发模式下,调试工具栏可能无法正常加载,网页显示速度可能明显变慢。

  2. $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.localmyproject.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/

在主配置文件中添加以下内容,例如 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>

使用 mod_userdir 托管(共享主机)

在共享主机环境中,一种常见的做法是使用 Apache 模块“mod_userdir”自动启用每个用户的虚拟主机。需要额外的配置才能允许 CodeIgniter4 从这些每个用户的目录中运行。

以下假设服务器已配置为使用 mod_userdir。有关启用此模块的指南,请参阅 Apache 文档

由于 CodeIgniter4 默认情况下期望服务器在 public/index.php 中找到框架前端控制器,因此您必须指定此位置作为搜索请求的备用位置(即使 CodeIgniter4 安装在每个用户的 Web 目录中)。

默认的用户 Web 目录 ~/public_htmlUserDir 指令指定,通常位于 apache2/mods-available/userdir.confapache2/conf/extra/httpd-userdir.conf

UserDir public_html

因此,您需要配置 Apache,使其在尝试提供默认值之前首先查找 CodeIgniter 的公共目录。

UserDir "public_html/public" "public_html"

确保也为 CodeIgniter 公共目录指定选项和权限。一个 **userdir.conf** 可能看起来像

<IfModule mod_userdir.c>
    UserDir "public_html/public" "public_html"
    UserDir disabled root

    <Directory /home/*/public_html>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>

    <Directory /home/*/public_html/public>
        AllowOverride All
        Options MultiViews Indexes FollowSymLinks
        <Limit GET POST OPTIONS>
            # Apache <= 2.2:
            # Order allow,deny
            # Allow from all

            # Apache >= 2.4:
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            # Apache <= 2.2:
            # Order deny,allow
            # Deny from all

            # Apache >= 2.4:
            Require all denied
        </LimitExcept>
    </Directory>
</IfModule>

删除 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**。

您项目的大多数路径是在引导过程中定义的。您可以使用预定义的常量来覆盖这些路径,但在使用默认值时,请确保您的路径与安装方法的预期目录结构一致。