PHP
PHP 是一种被广泛使用的通用脚本语言,尤其适用于 Web 开发,并且可以嵌入到 HTML 中。
安装
由于某些应用程序软件无法使用最新的 PHP 版本,您可以同时安装 php-legacy。该软件包提供了最旧的仍在 积极支持 的 PHP 分支,并且必须在需要它的应用程序中进行配置。有关详细说明,请参见 Nextcloud#迁移到 php-legacy。
您可以在 AUR 中找到旧版本和固定版本的 PHP,包括 php56AUR、 php74AUR、 php80AUR、 php81AUR 和 php82AUR。这些是使用 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 应用程序(如
nextcloud
和phpmyadmin
)的默认 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-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 扩展,不能像其他更方便的扩展那样加载。这是因为它赋予了 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
取消注释软件包的行,例如 /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/用户数据 缓存。两者都可以显着提高应用程序速度,因此应尽可能启用。
- Zend OPCache 仅提供 opcode 缓存。
- APCu 仅提供 userland 缓存。
OPCache
OPCache 与标准 PHP 发行版捆绑在一起,因此要启用它,您只需在您的 PHP 配置文件中添加或取消注释以下行
/etc/php/php.ini
zend_extension=opcache
其选项和建议设置的列表可以在 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
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 软件包标记为过时。