跳转至内容

PHP

来自 ArchWiki

PHP 是一种广泛使用的通用脚本语言,特别适合 Web 开发,并可嵌入 HTML 中。

安装

安装 php 软件包。

由于某些应用程序无法使用 最新 的 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 应用(如 nextcloudphpmyadmin)的默认 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

安装并配置 Redis,然后安装 php-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 网站上的 官方条目 中找到。

警告 如果您选择应用其手册提供的 建议设置,请务必仔细阅读这些说明下方的 第一条评论。在某些配置中,这些设置会导致产生 zend_mm_heap corrupted 等错误。

APCu

APCu 可以通过 php-apcu 软件包安装。您可以通过取消 /etc/php/conf.d/apcu.ini 中以下行的注释,或将其添加到您的 PHP 配置文件 中来启用它。

extension=apcu

本文或本章节已过时。

原因: 链接的 INSTALL 文件已被删除,改为指向 在线文档 (讨论请见 Talk:PHP)

其作者建议了一些 建议设置,其中包括:

  • apc.enabled=1apc.shm_size=32M 并不一定需要,因为它们代表了 默认值
  • 另一方面,apc.ttl=7200 似乎 相当有益
  • 最后是 apc.enable_cli=1,虽然手册 不推荐 使用,但某些软件(如 ownCloud)可能需要它。
提示 您可以将这些设置添加到 APCu 自带的 /etc/php/conf.d/apcu.ini 中,或者直接添加到您的 PHP 配置文件 中。只需确保不要两次启用该扩展,否则会在系统日志中显示错误。

开发工具

https://vscode.js.cn/ || code
  • Aptana Studio — 用于 PHP 编程和 Web 开发的 IDE。没有 PHP 调试器。
http://www.aptana.com/products/studio3.html || aptana-studioAUR
  • Eclipse PDT — Eclipse 的 PHP 变体。
https://www.eclipse.org/pdt/ || eclipse-php-binAUR
  • Komodo — 对 PHP+HTML+JavaScript 集成度很好的 IDE。
http://komodoide.com/ || komodo-ideAUR, 仅编辑器版: komodo-editAUR
  • Netbeans — 支持多种语言(包括 PHP)的 IDE。包含调试、重构、代码模板、自动补全、XML 功能以及 Web 设计和开发功能。
https://netbeans.org/ || netbeans
  • 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 的应用程序。
https://box-project.github.io/box2/ || php-boxAUR
  • PHP Depend — PHP 的软件度量工具。
https://pdepend.org/ || pdependAUR
  • PHP Coding Standards Fixer — 用于代码的 PSR-1 和 PSR-2 编码标准修复工具。
https://github.com/FriendsOfPHP/PHP-CS-Fixer || php-cs-fixerAUR
  • PHP CodeSniffer — 标记化 PHP、JavaScript 和 CSS 文件,并检测是否违反了定义的编码标准集。
https://pear.php.net/package/PHP_CodeSniffer/ || php-codesnifferAUR
  • phpcov — PHP_CodeCoverage 库的命令行前端。
https://github.com/sebastianbergmann/phpcov || phpcovAUR
  • phpDox — PHP 项目的文档生成器,包括但不限于 API 文档。
http://phpdox.de/ || phpdoxAUR
  • PHPLoc — 用于快速测量 PHP 项目大小的工具。
https://github.com/sebastianbergmann/phploc/ || phplocAUR
  • PhpMetrics — 提供关于 PHP 项目的各种指标。
https://www.phpmetrics.org/ || phpmetricsAUR
  • PHPUnit — 面向程序员的 PHP 测试框架。
https://phpunit.de || phpunitAUR
  • Producer — 用于验证并发布您的 PHP 库软件包的命令行质量保证工具。
http://getproducer.org/ || producerAUR

故障排除

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,

参见

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.