跳至內容

PHP

出自 Arch Linux 中文维基

PHP是一種廣泛使用的通用腳本語言,特別適合於 Web 開發,可嵌入到 HTML 中。


安裝

[編輯 | 編輯原始碼]

安裝軟體包 php

由於某些應用程式無法使用最新版本的 PHP,您可以並行安裝 php-legacy。該軟體包提供了最老的仍在積極支持的 PHP 分支,並且必須在需要它的應用程式中進行配置。有關詳細說明,請參閱 Nextcloud#Migrating to php-legacy

您可以在 AUR 中找到較舊和固定版本的 PHP,包括 php56AURphp74AURphp80AURphp81AURphp82AUR。這些是使用 openSUSE Build Service 構建的二進制版本。

運行

[編輯 | 編輯原始碼]

雖然PHP可以獨立運行,但它通常與Web伺服器一起使用。這需要安裝額外的軟體包並編輯配置文件。常見的設置請參考以下內容:

要想像純CGI那樣運行PHP,需要安裝 php-cgi

配置

[編輯 | 編輯原始碼]

主要的PHP配置文件位於 /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 開始,和上游一樣默認不再設置,要使用的用戶請手動設置。符號連結會被解析,所以無法通過符號連結跳過限制。某些軟體的 Arch 軟體包,例如 nextcloudphpmyadmin 安裝在 /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

欲使用 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 可以在伺服器上直接創建進程。雖然這可能是你想要的,但是這樣也會讓 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,然後安裝 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 緩存,這兩種緩存都大幅度提升性能,因此最好開啟。

OPCache

[編輯 | 編輯原始碼]

OPCache隨PHP發布,因此在PHP configuration file中開啟或添加此行即可:

/etc/php/php.ini
zend_extension=opcache

你可在官網 找到其他設置以及建議設置。

警告:如果你使用推薦設置,要確保你一仔細看過說明,某些情況下可能導致如下錯誤:zend_mm_heap corrupted

通過 php-apcu 軟體包安裝 APCu, 然後在 /etc/php/conf.d/apcu.ini 中取消下面行的注釋:

extension=apcu.so

作者 建議進行一些設置[失效連結 2021-05-17 ⓘ]:

提示:可以將設置加入 APCu 自己的 /etc/php/conf.d/apcu.ini 或直接加到住配置文件,只需要注意不要同時加入。

開發工具

[編輯 | 編輯原始碼]
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 是一個用於構建和管理 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

參見

[編輯 | 編輯原始碼]