PHP - Arch Linux 中文维基

跳转到内容

# PHP

来自 Arch Linux 中文维基

相关文章

- Pdepend
- Php-codesniffer-drupal
- PhpMetrics
- PHPLOC
- PhpDox

翻译状态：

- 本文（或部分内容）译自 PHP，最近一次同步于 2025-01-24，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

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

## 安装

安装软件包 php包。

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

您可以在 AUR 中找到较旧和固定版本的 PHP，包括 php56AUR、php74AUR、php80AUR、php81AUR 和 php82AUR。这些是使用 openSUSE Build Service 构建的二进制版本。

## 运行

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

- Apache HTTP Server#PHP
- nginx#PHP implementation
- lighttpd#PHP
- Hiawatha#CGI

要想像纯CGI那样运行PHP,需要安装 php-cgi包 。

## 配置

主要的PHP配置文件位于 `/etc/php/php.ini`，并且有详细的文档说明。

- 建议在`/etc/php/php.ini` 中设置所在时区(list of timezones) 。如下:

    date.timezone = Europe/Berlin

- 如果你想调试PHP时显示错误，在`/etc/php/php.ini`中将`display_errors` 设为 `On`：

    display_errors=On

- open_basedir 限制 PHP 可以访问的目录，可以增加安全性，但是会影响程序的正常执行。从 PHP 7.0 开始，和上游一样默认不再设置，要使用的用户请手动设置。符号链接会被解析，所以无法通过符号链接跳过限制。某些软件的 Arch 软件包，例如 `nextcloud` 和 `phpmyadmin` 安装在 `/usr/share/webapps`，然后在 `/etc/webapps` 中创建了配置文件的符号链接。设置 `open_basedir` 时请加入这两个目录。例如：

    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` 中设置，如： (e.g. `/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

安装php-imagick包。这个软件包会创建 `/etc/php/conf.d/imagick.ini` 配置文件。

要让 imagemagick 支持 SVG,需要安装 librsvg包。

### 多线程

要使用 POSIX 多线程，需要 parallel 扩展 。用 `pecl` 安装 parallel (https://pecl.php.net/package/parallel) 扩展，需要 PHP 在编译时启用线程安全选项`--enable-maintainer-zts`. 当前最简单的方式是用需要的选项重新编译.

可在 PHP pthreads extension 页面找到指令介绍。

### PCNTL

利用 PCNTL 可以在服务器上直接创建进程。虽然这可能是你想要的，但是这样也会让 PHP 有能力把机器搞的一团糟。所以 PHP 不能和其他扩展一样加载，要启用此扩展，需要重新编译PHP。ArchLinux 的 PHP 已经加入 "--enable-pcntl"选项，默认已经启用。

### MySQL/MariaDB

根据 MariaDB 页面安装并配置 MySQL/MariaDB.

取消 `/etc/php/php.ini` 中下面行前面的注释 :

    extension=pdo_mysql.so
    extension=mysqli.so

警告：PHP 7.0 中 删除了 `mysql.so`。

可以给网络脚本最低的 MySQL 用户权限，可以编辑 `/etc/my.cnf.d/server.cnf`，在 'mysqld 段落添加 `skip-networking`，这样 MyQSL 服务器就仅允许通过 localhost 本地访问。请参考 MariaDB#Enable access locally only via Unix sockets。设置之后需要重启 MySQL。

### Redis

安装并配置 Redis，然后安装 php-redis包.

在 `/etc/php/conf.d/redis.ini` 中取消 redis 扩展的注释。同时在 `/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() 函数进行调试、评测、追踪。

安装 xdebug包 并取消 `/etc/php/conf.d/xdebug.ini` 中如下行前面的注释：

    zend_extension=xdebug.so

你可以通过在同一文件中添加 xdebug.mode 行来配置 XDebug 的行为。默认情况下，它设置为 `xdebug.mode=develop`。

对于 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 configuration file中开启或添加此行即可：

    /etc/php/php.ini

    zend_extension=opcache

你可在官网 找到其他设置以及建议设置。

警告：如果你使用推荐设置，要确保你一仔细看过说明，某些情况下可能导致如下错误：`zend_mm_heap corrupted`。

### APCu

通过 php-apcu包 软件包安装 APCu, 然后在 `/etc/php/conf.d/apcu.ini` 中取消下面行的注释：

    extension=apcu.so

作者 建议进行一些设置[失效链接 2021-05-17 ⓘ]:

- `apc.enabled=1` 和 `apc.shm_size=32M` 并不是必须的，因为这已经是 默认值[失效链接 2021-05-17 ⓘ];
- `apc.ttl=7200` 看上去 很有效[失效链接 2021-05-17 ⓘ];
- 最后, `apc.enable_cli=1`, 虽然手册上 不建议启用，有些软件比如 ownCloud 需要这个选项.

提示：可以将设置加入 APCu 自己的 `/etc/php/conf.d/apcu.ini` 或直接加到住配置文件，只需要注意不要同时加入。

## 开发工具

- Visual Studio Code — 支持 PHP 等多种语言的开发编辑器。

  https://code.visualstudio.com/ || visual-studio-code-binAUR

- Aptana Studio — 用于PHP和网页开发的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 — 用于多种语言的IDE，包括PHP。包含调试、重构、代码模板、自动补全、XML特性、网页设计和其他开发功能。

  https://netbeans.org/ || netbeans包

- JetBrains PhpStorm — 商业的、跨平台PHP IDE，基于JetBrains的IntelliJ IDEA平台。可以从JetBrains获取免费的教育许可。[1]

  https://www.jetbrains.com/phpstorm/ || phpstormAUR, 30天试用：phpstorm-eapAUR

## 命令行工具

本文或本章节的语言、语法或风格需要改进。参考：帮助:风格

原因：使用 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 运行。因此，为了使用旧版 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 包标记为 outdated。

## 参见

- PHP 官方网站
- Arch Linux PHP 传统分支公告

分类：​

- 编程语言
- 包含失效链接的页面
- 使用“模板:风格”标记的页面或章节

PHP
添加话题