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/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 扩展,不能像其他更方便的扩展一样加载。这是因为它赋予了 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/user data 缓存。两者都可以显着提高应用程序速度,因此应尽可能启用。
- 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 软件包标记为过时。