跳转到内容

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

参见

[编辑 | 编辑源代码]