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
新增話題