PHP
PHP 是一种广泛使用的通用脚本语言,特别适合 Web 开发,并可嵌入 HTML 中。
安装
由于某些应用程序无法使用 最新 的 PHP 版本,您可以同时安装 php-legacy。该软件包提供了仍然 受支持(至少有安全支持)的最旧 PHP 分支,且必须在需要它的应用程序中进行配置。
您可以在 Arch 用户仓库 (AUR) 中找到 PHP 的旧版本和固定版本
这些是使用 openSUSE 构建服务 制作的二进制构建版本。
运行
虽然 PHP 可以独立运行,但通常与 Web 服务器配合使用。这需要安装额外的软件包并编辑配置文件。对于常见的设置,请参阅以下内容:
要以纯 CGI 方式运行 PHP 脚本,需要 php-cgi 软件包。
配置
PHP 的主要配置文件文档完善,位于 /etc/php/php.ini。
- 建议在
/etc/php/php.ini中设置时区(时区列表),如下所示:
date.timezone = Europe/Berlin
- 如果您想显示错误以调试 PHP 代码,请在
/etc/php/php.ini中将display_errors修改为On。
display_errors = On
- open_basedir 指令限制了 PHP 可以访问的路径,从而提高安全性,但代价是可能干扰程序的正常执行。从 PHP 7.0 开始,为了更接近上游,它 不再默认设置,因此希望使用的用户必须手动配置。所有符号链接都会被解析,因此无法通过符号链接绕过此限制。某些 Web 应用(如
nextcloud和phpmyadmin)的默认 Arch 软件包将应用安装在/usr/share/webapps下,并创建指向/etc/webapps下实际配置文件的符号链接。因此,如果您正在设置open_basedir,请确保上述两个文件夹都包含在open_basedir中。当然,对于安装在其他位置的 Web 应用,情况会有所不同。示例:
open_basedir = /srv/http/:/var/www/:/home/:/tmp/:/var/tmp/:/var/cache/:/usr/share/pear/:/usr/share/webapps/:/etc/webapps/
扩展
许多常用的 PHP 扩展也可以在官方仓库中找到。
$ pacman -Ss php-
/etc/php/php.ini,也可以在 /etc/php/conf.d 目录中启用/配置扩展(例如 /etc/php/conf.d/imagick.ini)。现有扩展位于 /usr/lib/php/modules 目录中。
例如,要启用 ext-iconv 扩展,请创建 /etc/php/conf.d/extensions.ini 文件并添加以下行:
extension=iconv
当前和旧版本的 PHP 扩展也可以在 AUR 中找到,前缀为 php- 和 php56- 等,例如 php-imagick, php-redis, php56-mcryptAUR。
gd
对于 php-gd,请取消 /etc/php/php.ini 中对应行的注释。
extension=gd
Imagemagick
安装 imagemagick 软件包,并安装所列出的 PHP 扩展库之一。
安装 php-imagick,它将创建 /etc/php/conf.d/imagick.ini 文件以配置该扩展。
如果您希望 imagemagick 支持 SVG(例如为了使用 nextcloud),则需要安装 librsvg 作为依赖。
PECL
确保已安装 php-pearAUR 软件包。
# pecl install imagick
创建一个 /etc/php/conf.d/imagick.ini 并启用该扩展。
/etc/php/conf.d/imagick.ini
extension=imagick
多线程
如果您希望使用 POSIX 多线程,则需要 parallel 扩展。要使用 pecl 安装该扩展,您必须使用带有线程安全支持标志 --enable-maintainer-zts 的 PHP 编译版本。目前最干净的做法是使用该标志重新构建原始软件包。相关说明可以在 PHP pthreads 扩展 页面找到。
PCNTL
PCNTL 允许您直接在服务器端机器上创建进程。虽然这看起来很有用,但它也赋予了 PHP 极大的破坏力。因此,作为一种赋予 PHP 强大功能的扩展,它不能像其他扩展那样随意加载。要启用 PCNTL,必须将其编译进 PHP。
Arch Linux 上的 php 软件包目前使用 "--enable-pcntl" 构建,因此默认应该可用。
MySQL/MariaDB
按照 MariaDB 中的说明安装并配置 MySQL/MariaDB。
取消 /etc/php/php.ini 中 以下行 的注释:
extension=pdo_mysql extension=mysqli
extension=mysql 已在 PHP 7.0 中 移除。您可以为 Web 脚本添加权限较低的 MySQL 用户。您可能还想编辑 /etc/my.cnf.d/server.cnf 并在 mysqld 部分添加 skip-networking 行,这样 MySQL 服务器只能通过本地主机访问,如 MariaDB#仅通过 Unix 套接字在本地启用访问 所述。您必须重启 MySQL 才能使更改生效。
Redis
取消相应软件包行的注释,例如 /etc/php/conf.d/redis.ini。还要确保在 /etc/php/conf.d/igbinary.ini 中启用了(也取消了注释)igbinary 扩展。
PostgreSQL
安装并配置 PostgreSQL,然后安装 php-pgsql 软件包,并取消 /etc/php/php.ini 中以下行的注释。
extension=pdo_pgsql extension=pgsql
Sqlite
安装并配置 SQLite,然后安装 php-sqlite 软件包,并取消 /etc/php/php.ini 中以下行的注释。
extension=pdo_sqlite extension=sqlite3
XDebug
XDebug 允许您轻松调试(使用修改后的 var_dump 函数)、配置或追踪 PHP 代码。
安装 xdebug 并取消 /etc/php/conf.d/xdebug.ini 中以下行的注释。
zend_extension=xdebug.so
您可以通过在该文件中添加 xdebug.mode 行来配置 XDebug 的行为。默认情况下,它被设置为 xdebug.mode=develop。
xdebug.remote_autostart=on。对于 Xdebug 3,默认端口为 9003;要更改它,请设置 xdebug.remote_port=9000。Snuffleupagus
安装 php-snuffleupagus,取消 /etc/php/conf.d/snuffleupagus.ini 中两行的注释,并将 snuffleupagus.rules 文件的路径放入第二行。
extension=snuffleupagus.so sp.configuration_file=/etc/php/conf.d/snuffleupagus.rules
缓存
PHP 中有两种缓存:操作码 (opcode)/字节码 (bytecode) 缓存和 用户空间 (userland)/用户数据 (user data) 缓存。两者都能显著提高应用程序的速度,因此应尽可能启用。
- Zend OPCache 仅提供 操作码 缓存。
- APCu 仅提供 用户空间 缓存。
OPcache
OPcache 随标准 PHP 分发版捆绑提供,自 8.5 版本(2025 年 11 月)起默认启用。其选项列表和建议设置可在 PHP 网站上的 官方条目 中找到。
APCu
APCu 可以通过 php-apcu 软件包安装。您可以通过取消 /etc/php/conf.d/apcu.ini 中以下行的注释,或将其添加到您的 PHP 配置文件 中来启用它。
extension=apcu
其作者建议了一些 建议设置,其中包括:
apc.enabled=1和apc.shm_size=32M并不一定需要,因为它们代表了 默认值;- 另一方面,
apc.ttl=7200似乎 相当有益; - 最后是
apc.enable_cli=1,虽然手册 不推荐 使用,但某些软件(如 ownCloud)可能需要它。
/etc/php/conf.d/apcu.ini 中,或者直接添加到您的 PHP 配置文件 中。只需确保不要两次启用该扩展,否则会在系统日志中显示错误。开发工具
- Visual Studio Code — 用于 PHP 及其他语言编程的代码编辑器。
- Aptana Studio — 用于 PHP 编程和 Web 开发的 IDE。没有 PHP 调试器。
- Eclipse PDT — Eclipse 的 PHP 变体。
- Komodo — 对 PHP+HTML+JavaScript 集成度很好的 IDE。
- http://komodoide.com/ || komodo-ideAUR, 仅编辑器版: komodo-editAUR
- Netbeans — 支持多种语言(包括 PHP)的 IDE。包含调试、重构、代码模板、自动补全、XML 功能以及 Web 设计和开发功能。
- JetBrains PhpStorm — 基于 JetBrains IntelliJ IDEA 平台的商业化跨平台 PHP IDE。您可以从 Jetbrains 获得教育免费许可证。[1]。
- https://www.jetbrains.com/phpstorm/ || phpstormAUR, 30天试用: phpstorm-eapAUR
命令行工具
Composer
Composer 是 PHP 的依赖管理器。可以通过 composer 软件包安装。
允许用户级别安装
要允许当前 用户 进行全局软件包安装(例如 $ composer global require "package/name"),您可能需要通过 环境变量 指定默认位置:
PATH="$HOME/.config/composer/vendor/bin:$PATH"
与 php-legacy 一起使用
某些应用程序可能需要 php-legacy,但默认情况下,composer 使用最新版本的 PHP 运行。因此,为了使用遗留版本,必须在脚本、makefile 和其他适用位置将 composer 替换为 php-legacy /usr/bin/composer。构建 Nextcloud 应用就是一个例子。
其他
- Box — 用于构建和管理 Phar 的应用程序。
- PHP Depend — PHP 的软件度量工具。
- https://pdepend.org/ || pdependAUR
- PHP Coding Standards Fixer — 用于代码的 PSR-1 和 PSR-2 编码标准修复工具。
- PHP CodeSniffer — 标记化 PHP、JavaScript 和 CSS 文件,并检测是否违反了定义的编码标准集。
- phpcov — PHP_CodeCoverage 库的命令行前端。
- phpDox — PHP 项目的文档生成器,包括但不限于 API 文档。
- http://phpdox.de/ || phpdoxAUR
- PHPLoc — 用于快速测量 PHP 项目大小的工具。
- PhpMetrics — 提供关于 PHP 项目的各种指标。
- PHPUnit — 面向程序员的 PHP 测试框架。
- https://phpunit.de || phpunitAUR
- Producer — 用于验证并发布您的 PHP 库软件包的命令行质量保证工具。
故障排除
PHP Fatal error: Class 'ZipArchive' not found
确保启用了 zip 扩展。
/etc/php/php.ini
extension=zip
/etc/php/php.ini 未被解析
如果您的 php.ini 未被解析,ini 文件通常以所使用的 sapi 命名。例如,如果您使用 uwsgi,文件名应该是 /etc/php/php-uwsgi.ini。如果您使用 cli,文件名则是 /etc/php/php-cli.ini。
PHP Warning: PHP Startup: <module>: Unable to initialize module
运行 php 时,此错误表明上述模块已过时。这在 Arch Linux 中很少发生,因为维护人员会确保核心 PHP 和所有模块仅以兼容版本提供。
这可能是由于从 AUR 编译的模块引起的。您通常可以通过查看 /usr/lib/php/modules/ 下文件的日期来确认这一点。
要修复此问题,请通过使用常用名称查询 AUR 来查找该模块的兼容更新。
如果适用,请将过时的 AUR 软件包标记为 outdated。
使用 php-fpm 时出现权限拒绝问题
存在一个默认的 AppArmor php-fpm 配置文件,该文件禁止 php-fpm 访问系统路径之外的文件。您可能需要通过 创建 /etc/apparmor.d/local/php-fpm 来手动允许访问您的自定义 Web 路径。
/etc/apparmor.d/local/php-fpm
/path/to/my/web/path/** rw,