PHP是一種廣泛使用的通用腳本語言,特別適合於 Web 開發,可嵌入到 HTML 中。
安裝
由於某些應用程式無法使用最新版本的 PHP,您可以並行安裝 php-legacy包。該軟體包提供了最老的仍在積極支持的 PHP 分支,並且必須在需要它的應用程式中進行配置。有關詳細說明,請參閱 Nextcloud#Migrating to php-legacy。
您可以在 AUR 中找到較舊和固定版本的 PHP,包括 php56AUR、php74AUR、php80AUR、php81AUR 和 php82AUR。這些是使用 openSUSE Build Service 構建的二進制版本。
運行
雖然PHP可以獨立運行,但它通常與Web伺服器一起使用。這需要安裝額外的軟體包並編輯配置文件。常見的設置請參考以下內容:
要想像純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
mysql.so
。可以給網絡腳本最低的 MySQL 用戶權限,可以編輯 /etc/my.cnf.d/server.cnf
,在 'mysqld 段落添加 skip-networking
,這樣 MyQSL 伺服器就僅允許通過 localhost 本地訪問。請參考 MariaDB#Enable access locally only via Unix sockets。設置之後需要重啟 MySQL。
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
你可在官網 找到其他設置以及建議設置。
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 需要這個選項.
/etc/php/conf.d/apcu.ini
或直接加到住配置文件,只需要注意不要同時加入。開發工具
- Visual Studio Code — 支持 PHP 等多種語言的開發編輯器。
- Aptana Studio — 用於PHP和網頁開發的IDE。沒有PHP調試器。
- Eclipse PDT — Eclipse的PHP變種。
- Komodo — 集成了PHP+HTML+JavaScript的IDE。
- http://komodoide.com/ || komodo-ideAUR, 僅編輯器:komodo-editAUR
- Netbeans — 用於多種語言的IDE,包括PHP。包含調試、重構、代碼模板、自動補全、XML特性、網頁設計和其他開發功能。
- JetBrains PhpStorm — 商業的、跨平台PHP IDE,基於JetBrains的IntelliJ IDEA平台。可以從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 運行。因此,為了使用舊版 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。