PHP

来自 ArchWiki

PHP 是一种被广泛使用的通用脚本语言,尤其适用于 Web 开发,并且可以嵌入到 HTML 中。

安装

安装 php 软件包。

由于某些应用程序软件无法使用最新的 PHP 版本,您可以同时安装 php-legacy。该软件包提供了最旧的仍在 积极支持 的 PHP 分支,并且必须在需要它的应用程序中进行配置。有关详细说明,请参见 Nextcloud#迁移到 php-legacy

您可以在 AUR 中找到旧版本和固定版本的 PHP,包括 php56AURphp74AURphp80AURphp81AURphp82AUR。这些是使用 openSUSE Build Service 的二进制构建。

运行

虽然 PHP 可以独立运行,但它通常与 Web 服务器一起使用。这需要安装额外的软件包并编辑配置文件。对于常见的设置,请参阅以下内容

要将 PHP 脚本作为纯 CGI 运行,您需要 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 软件包将 Web 应用程序安装在 /usr/share/webapps 下,并创建一个指向 /etc/webapps 下这些 Web 应用程序的实际配置文件的符号链接。因此,如果您要设置 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/conf.d 目录(例如 /etc/php/conf.d/imagick.ini)来启用/配置扩展,而不是编辑 /etc/php/php.ini

现有的扩展位于 /usr/lib/php/modules 目录中。

例如,要启用 ext-iconv 扩展,请创建文件 /etc/php/conf.d/extensions.ini,并在其中添加以下行

extension=iconv

当前和旧版本的 PHP 扩展也可以在 AUR 中找到,前缀如 php-php56-,例如 php-imagickphp-redisphp56-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 扩展,不能像其他更方便的扩展那样加载。这是因为它赋予了 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 服务器只能通过 localhost 访问,如 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/用户数据 缓存。两者都可以显着提高应用程序速度,因此应尽可能启用。

OPCache

OPCache 与标准 PHP 发行版捆绑在一起,因此要启用它,您只需在您的 PHP 配置文件中添加或取消注释以下行

/etc/php/php.ini
zend_extension=opcache

其选项和建议设置的列表可以在 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/ || visual-studio-code-binAUR
  • 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

命令行工具

本文或章节需要语言、wiki 语法或样式改进。请参阅 Help:Style 以获取参考。

原因: 使用 Template:App。(在 Talk:PHP 中讨论)

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

Box 是一个用于构建和管理 Phars 的应用程序。可以使用 php-boxAUR 软件包安装它。

PDepend

PHP Depend (pdepend) 是一个 PHP 软件指标工具。可以使用 pdependAUR 软件包安装它。

PHP Coding Standards Fixer

PHP Coding Standards Fixer 是一个用于修复代码的 PSR-1 和 PSR-2 编码标准修复器。可以使用 php-cs-fixerAUR 软件包安装它。

PHP-CodeSniffer

PHP CodeSniffer 对 PHP、JavaScript 和 CSS 文件进行标记化,并检测是否违反了一组定义的编码标准。可以使用 php-codesnifferAUR 软件包安装它。

phpcov

phpcov 是 PHP_CodeCoverage 库的命令行前端。可以使用 phpcovAUR 软件包安装它。

phpDox

phpDox 是 PHP 项目的文档生成器。这包括但不限于 API 文档。可以使用 phpdoxAUR 软件包安装它。

PHPLoc

PHPLoc 是一个用于快速测量 PHP 项目大小的工具。可以使用 phplocAUR 软件包安装它。

PhpMetrics

PhpMetrics 提供了有关 PHP 项目的各种指标。可以使用 phpmetricsAUR 软件包安装它。

PHPUnit

PHPUnit 是一个面向程序员的 PHP 测试框架。可以使用 phpunitAUR 软件包安装它。

Producer

Producer 是一个命令行质量保证工具,用于验证然后发布您的 PHP 库软件包。可以使用 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 软件包标记为过时

参见