当前位置: 首页>>技术教程>>正文


WP需要和/或使用的PHP扩展和库是什么?

webfans 技术教程 , , 去评论

问题描述

Codex loosely only mentions PHP version in server requirements,但PHP可以配置相当广泛的排除/包括不同的部分。

什么是扩展/库:

  1. WP需要工作吗? MySQL的…

  2. 特定功能需要? GD?……

  3. 是特定功能的最佳操作的首选? curl …

  4. 插件通常使用?压缩…

最佳解决办法

我给了这个更多的想法和给定的WP代码库(包括捆绑的库)的大小,手动编译这样的列表似乎不太现实(并且为每个新版本重复它 – meh)。

我查找了相应的静态代码分析工具 – PHP_CompatInfo,经过一些修改后生成了以下核心使用的扩展报告(版本扫描3.3.1):

  • cURL – 127使用(需要libcurl)

    • HTTP API(类WP_Http_curl)

    • url_is_accessable_via_ssl()

    • SimplePie(用类WP_SimplePie_File覆盖)

    • GoogleSpell(来自TinyMCE包,是不是用过?)

  • Date/Time – 367使用

  • DOM – 6使用(需要libxml)

    • iis7_rewrite_rule_exists()

    • iis7_delete_rewrite_rule()

    • iis7_add_rewrite_rule()

    • saveDomDocument()

  • POSIX Regex – 23使用

  • Filter – 2使用

    • PHPMailer->ValidateAddress()类(可选)

  • FTP – 72使用

    • ftp_base

    • class ftp(纯插槽和插座版本)

    • WP_Filesystem_FTPext

    • WP_Filesystem_ftpsockets

  • GD – 56使用

    • wp-admin\includes\image-edit.php

    • wp-admin\includes\image.php

    • wp-includes\media.php

  • Hash – 6使用

    • wp-includes\pluggable.php多次使用(可选 – wp-includes\compat.php中的后备)

  • iconv – 5用途

    • SimplePie类(可选)

    • wp_check_invalid_utf8()(可选)

    • wp-mail.php(可选)

  • JSON – 20使用

    • 可选,wp-includes/compat.php中的后备

  • libxml – 4用途

    • WP_oEmbed->_parse_xml()类(可选)

    • 了SimplePie

  • Multibyte String – 29使用

    • wp-includes/compat.php中的一些后备

  • MySQL – 60使用

    • wpdb

    • SimplePie_Cache类(用WP_Feed_Cache类覆盖)

  • OpenSSL – 4用途

    • PHPMailer

  • PCRE – 743使用

  • SimpleXML – 1使用

    • WP_oEmbed类(似乎是可选的)

  • Sockets – 64使用

    • ftp类(sockets实施)

  • SPL – 3使用

  • Tokenizer – 3使用

    • wp_doc_link_parse()(可选)

  • XML Parser – 89使用

  • XMLReader – 1使用

    • SimplePie(似乎是可选的)

  • Zlib – 30使用

次佳解决办法

答案可能很复杂而且很长,据我所知,服务器和服务器之间也会有一些差异。操作系统(IIS,Apache)..我不能说下面的列表是一个完整的列表,但它包括一些我知道需要的:

  • Curl和CurlSSL – 不确定它是否必需,但是如果可用的话,很多WordPress代码都会使用它。然而,许多插件需要它和/或没有它的功能有限。

  • Exif – 允许WordPress的媒体处理程序从图像中提取Exif数据。

  • Gettext – .po .mo处理翻译本地化国际化..

  • FTP – 用于通过FTP进行插件和WordPress升级。

  • GD – 不需要介绍,对吗?

  • Iconv – 从邮件到RSS解析的所有内容的字符集转换。

  • Mbregex和Mbstring – 这个名字非常具有描述性 – 提供了遍布各处的功能:-)

  • Mcrypt – wordpress不需要,但许多插件确实需要它。

  • Mime Magic – 现在已经在wordpress中弃用了 – 但是对于后兼容性仍然很好。

  • *系统的Mysql和Mysql * – 我们都知道这是什么以及为什么需要它,不是吗?

  • Openssl – 此库用于处理使用SSL证书加密的处理连接,因为WordPress可能能够连接到任何SSL(https)加密位置。

  • POSIX – 用于确保WordPress正确维护文件权限和所有权。

  • 路径信息检查 – 一些永久链接设置。

  • Pspell – 对TinyMCE的拼写检查功能,。

  • 套接字 – 管理FTP连接和邮件处理WordPress中的AKA SMTP和POP。

  • Zip – 不确定是否需要 – 但是这个cross-platform兼容的zip文件创建和提取类将由wordpress使用(如果可用)。

  • Zlib – 在很多情况下使用。示例 – js和css文件压缩。再次,不确定是否需要但需要。

如上所述 – 这绝不是一个完整的列表 – 它是在大约一年前编译的 – 它可能需要一些更新。其中许多功能并不完全是必需的但是建议。在许多情况下,wordpress将使用一个功能,如果它可用,如果没有,将忽略该任务。一个很好的例子是缺少GD库,它不会阻止wordpress运行,但它不会裁剪,调整大小或改变上传的图像 – 从而留下原始版本(并将“插入图像”中的”size”选项灰显发布“功能”..

作为旁注 – 我也会说,也许这个问题可能会在serverfault.com上获得比这里更正确/更新的答案…

第三种解决办法

(这不是一个答案。只是一些有用的信息。如果你认为这个信息没用,请告诉我,我只是删除它。)

我认为对于新手而言,就包装而言更容易,但由于包装因系统而异,因此很难涵盖所有这些包装。

由于我有使用Debian(& Debian-based发行版)的经验,我想分享这些具体信息:

  • PHP5-CLI

  • PHP5-dev的

  • PHP5-FPM

  • PHP5-CGI

  • PHP5-MySQL的

  • PHP5-XMLRPC

  • PHP5 curl

  • PHP5-GD

  • php-apc(不是必需的,但推荐)

  • php-pear

  • PHP5-IMAP

  • PHP5-mcrypt的

  • PHP5-pspell

上述包安装了其他答案中提到的所有扩展/库/模块;所有,除了Mime Magic,它是no longer required by WordPress

确保您的服务器与WordPress 100%兼容的另一个好方法是检查托管托管公司与pre-installed一起使用的软件包。由于他们有多年客户对不兼容性投诉的经验,他们会更清楚。

In case of Hostgator,他们的pre-install包含的PHP模块(你可能只需要大多数但不是全部):

php,server,wordpress

Media Temple提供了一个phpinfo();文件供您检查其配置。它也可用于比较目的。

第四种办法

我开发了我的WordPress环境检查器。它是一个简单的类,可以在Web SAPI或CLI上运行。这是维护版本https://github.com/szepeviktor/debian-server-tools/blob/master/webserver/php-env-check.php

<?php
/**
 * Check PHP environment.
 *
 * Usage through a webserver
 *     wget -q -O - "https://example.com/php-env-check.php"; echo
 * Usage on CLI
 *     php /path/to/php-env-check.php
 *
 * @package php-env-check
 * @version 0.2.0
 * @author Viktor Szépe <viktor@szepe.net>
 */

namespace O1;

// Local access only
if ( php_sapi_name() !== 'cli' && $_SERVER['REMOTE_ADDR'] !== $_SERVER['SERVER_ADDR'] ) {
    header( 'Status: 403 Forbidden' );
    header( 'HTTP/1.1 403 Forbidden', true, 403 );
    header( 'Connection: Close' );
    exit;
}

// Remove cached version of this file
if ( function_exists( 'opcache_invalidate' ) ) {
    opcache_invalidate( __FILE__ );
}

// Check environment
$check = new Check_Env();
$status = empty( $check->errors );

// Display report and exit
print json_encode( $check->errors );
exit( $status ? 0 : 1 );

/**
 * Check PHP configuration.
 */
final class Check_Env {

    /**
     * List of errors.
     */
    public $errors = array();

    /**
     * Run the checks.
     *
     * @param void
     */
    public function __construct() {

        // Extensions for WordPress on PHP 7.0
        // http://wordpress.stackexchange.com/a/42212

        // Engine version
        $this->assert( 'php', 70013, PHP_VERSION_ID );

        // Core directives
        $this->assert_directive( 'expose_php', '' );
        $this->assert_directive( 'allow_url_fopen', '' );
        $this->assert_directive( 'mail.add_x_header', '' );
        $this->assert_directive( 'realpath_cache_size', '64k' );
        $this->assert_directive( 'max_execution_time', '30' );
        $this->assert_directive( 'memory_limit', '128M' );
        $this->assert_directive( 'max_input_vars', '1000' );
        $this->assert_directive( 'post_max_size', '4M' );
        $this->assert_directive( 'upload_max_filesize', '4M' );

        // Compiled in Extensions
        // php -n -m | paste -s -d " "
        // Core date filter hash libxml openssl pcntl pcre Reflection session SPL standard zlib
        $this->assert_extension( 'date' );
        $this->assert_directive( 'date.timezone', 'Europe/Budapest' );
        $this->assert_extension( 'filter' );
        $this->assert_extension( 'hash' );
        $this->assert_extension( 'openssl' );
        $this->assert_extension( 'pcre' );
        $this->assert_extension( 'SPL' );
        $this->assert_extension( 'zlib' );

        // Common Extensions
        // dpkg -L php7.0-common | sed -n -e 's|^/usr/lib/php/\S\+/\(\S\+\)\.so$|\1|p' | paste -s -d " "
        // ctype iconv gettext tokenizer sockets pdo sysvsem fileinfo posix exif sysvmsg phar ftp calendar sysvshm shmop
        $this->assert_extension( 'ctype' ); // wp-includes/ID3/getid3.lib.php
        $this->assert_extension( 'posix' );
        $this->assert_extension( 'exif' ); // wp-admin/includes/image.php
        $this->assert_extension( 'ftp' );
        $this->assert_extension( 'gettext' ); // _()
        $this->assert_extension( 'iconv' );
        $this->assert_extension( 'mbstring' );
        $this->assert_extension( 'sockets' );
        $this->assert_extension( 'tokenizer' );

        // php7.0-json
        $this->assert_extension( 'json' );
        // php7.0-intl
        $this->assert_extension( 'intl' );
        // php7.0-xml
        // wddx xml simplexml xmlwriter xmlreader dom xsl
        $this->assert_extension( 'xml' );
        $this->assert_extension( 'SimpleXML' );
        $this->assert_extension( 'xmlreader' );
        $this->assert_extension( 'dom' );
        // php7.0-curl
        $this->assert_extension( 'curl' );
        // php7.0-gd
        $this->assert_extension( 'gd' );
        // php7.0-mysql
        // mysqlnd mysqli pdo_mysql
        // WP_USE_EXT_MYSQL will use mysqli through mysqlnd (no PDO)
        $this->assert_extension( 'mysqlnd' );
        $this->assert_extension( 'mysqli' );
        // php7.0-opcache
        $this->assert_extension( 'Zend OPcache', 'ext.opcache' );
        $this->assert_directive( 'opcache.restrict_api', '/home/prg123' );
        $this->assert_directive( 'opcache.memory_consumption', '256' );
        $this->assert_directive( 'opcache.interned_strings_buffer', '16' );
        $this->assert_directive( 'opcache.max_accelerated_files', '10000' );

        // Deprecated Extensions
        $this->assert_disabled_extension( 'mcrypt' );
        $this->assert_disabled_extension( 'mysql' );

        // Disabled Extensions
        // calendar fileinfo pcntl PDO pdo_mysql Phar readline
        // shmop sysvmsg(System V messages) sysvsem(System V semaphore) sysvshm(System V shared memory) wddx xmlwriter xsl

        $this->assert_disabled_extension( 'calendar' );
        $this->assert_disabled_extension( 'fileinfo' );
        $this->assert_disabled_extension( 'pcntl' );
        $this->assert_disabled_extension( 'PDO' );
        $this->assert_disabled_extension( 'pdo_mysql' );
        $this->assert_disabled_extension( 'Phar' );
        $this->assert_disabled_extension( 'readline' );
        $this->assert_disabled_extension( 'shmop' );
        $this->assert_disabled_extension( 'sysvmsg' );
        $this->assert_disabled_extension( 'sysvsem' );
        $this->assert_disabled_extension( 'sysvshm' );
        $this->assert_disabled_extension( 'wddx' );
        $this->assert_disabled_extension( 'xmlwriter' );
        $this->assert_disabled_extension( 'xsl' );
        // php7.0-sqlite3
        // pdo_sqlite sqlite3
        $this->assert_disabled_extension( 'pdo_sqlite' );
        $this->assert_disabled_extension( 'sqlite3' );

        // 3rd-party Extensions

        // php7.0-redis
        $this->assert_extension( 'igbinary' );
        $this->assert_extension( 'redis' );

        // Not for WordPress

        // Session
        $this->assert_directive( 'session.gc_maxlifetime', '1440' );
    }

    /**
     * Simple assert.
     *
     * @param $id string       Assert ID
     * @param $expected string Expected value
     * @param $result string   Current value
     */
    private function assert( $id, $expected, $result ) {

        if ( $expected !== $result ) {
            $this->errors[ $id ] = $result;
        }
    }

    /**
     * Assert for a PHP extension.
     *
     * @param $extension_name string Extension name
     * @param $id string             Optional assert ID
     */
    private function assert_extension( $extension_name, $id = '' ) {

        // Automatic ID
        if ( '' === $id ) {
            $id = 'ext.' . $extension_name;
        }
        $this->assert( $id, true, extension_loaded( $extension_name ) );
    }

    /**
     * Negative assert for a PHP extension.
     *
     * @param $extension_name string Extension name
     * @param $id string             Optional assert ID
     */
    private function assert_disabled_extension( $extension_name, $id = '' ) {

        // Automatic ID
        if ( '' === $id ) {
            $id = '!ext.' . $extension_name;
        }
        $this->assert( $id, false, extension_loaded( $extension_name ) );
    }

    /**
     * Assert for a PHP directive.
     *
     * @param $directive_name string Directive name
     * @param $expected string       Expected value
     * @param $id string             Optional assert ID
     */
    private function assert_directive( $directive_name, $expected, $id = '' ) {

        // Automatic ID
        if ( '' === $id ) {
            $id = $directive_name;
        }
        $this->assert( $id, $expected, ini_get( $directive_name ) );
    }
}

基于@rarst的工作

第五种办法

如果您想要一种简单的方法来验证您的服务器是否满足这些要求,那么现在可以使用方便的WP-CLI ext command

wp ext required显示运行WordPress所需的所有PHP扩展,而wp ext recommended显示可选的。 wp ext check是两个命令的组合。

当您需要快速检查新服务器上的系统要求和/或是否要以编程方式进一步处理此列表时,这些就派上用场了。

以下是wp ext required的工作原理:

$ wp ext required
+-----------+-----------+
| extension | installed |
+-----------+-----------+
| curl      | 1         |
| date      | 1         |
| dom       | 1         |
| filter    | 1         |
| ftp       | 1         |
| gd        | 1         |
| hash      | 1         |
| iconv     | 1         |
| json      | 1         |
| libxml    | 1         |
| mbstring  | 1         |
| mysqli    | 1         |
| openssl   | 1         |
| pcre      | 1         |
| posix     | 1         |
| SimpleXML | 1         |
| sockets   | 1         |
| SPL       | 1         |
| tokenizer | 1         |
| xml       | 1         |
| xmlreader | 1         |
| zlib      | 1         |
+-----------+-----------+
Success: All required extensions are installed

第六种办法

如果您使用的是Debian 7(Debian Wheezy),则需要安装PHP本身和少量扩展。 @Rarst提到的大部分内容已经包含在Debian最基本的PHP安装之一中。

PHP

Debian Wheezy有四个选项:libapache2-mod-php5libapache2-mod-php5filterphp5-cgiphp5-fpm。我选择php5-fpm但这完全取决于你希望你的web服务器和PHP如何进行交互。

MySQL的

您还需要PHP才能使用MySQL。您的选项是php5-mysqlphp5-mysqlnd。 php5-mysqlnd是原生的,通常更快。有些人可能会选择像MariaDB这样的替代品。

图形库可选

如果您希望调整图像大小,可以安装php5-gdphp5-imagick。 php5-imagick将为您提供更好的质量,如果可用,Wordpress将使用它。如果两者都安装,将使用php5-imagick。如果两者都没有安装,图像将不会调整大小(WordPress不会抱怨)。

HTTP可选

如果您安装php5-curl,它将被使用,但除了可能更好的性能之外,不需要它。


WordPress和大多数扩展都不需要其他任何扩展,但某些扩展可能有其他要求。

这是完整的基本安装行,为Wordpress提供了所需的一切,以实现最佳性能,而不是它没有:

apt-get install php5-fpm php5-mysqlnd php5-imagick php5-curl

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2746.html,转载请务必附带本地址声明。