Quels sont les extensions et les bibliothèques PHP nécessaires et / ou utilisées par WP?

71

Codex ne mentionne que la version de PHP dans les conditions requises du serveur , mais PHP peut être configuré de manière assez large pour exclure / inclure différentes parties .

Que sont les extensions / bibliothèques qui:

  1. sont nécessaires pour que WP fonctionne? MySQL ...
  2. sont nécessaires pour des fonctions spécifiques? GD? ...
  3. sont préférés pour un meilleur fonctionnement de fonctions spécifiques? cURL ...
  4. sont-ils couramment utilisés par les plugins? Zip ...
posée Rarst 12.02.2012 - 22:42
la source

8 réponses

81

J'ai réfléchi à la question et à la taille de la base de code WP (y compris des bibliothèques regroupées). Il ne semble pas très réaliste de compiler manuellement cette liste (et de la répéter à chaque nouvelle version - meh).

J'ai cherché l'outil d'analyse de code statique approprié - PHP_CompatInfo et après quelques retouches générées à la suite du rapport des extensions utilisées par le noyau (version scannée 3.3.1):

  • cURL - 127 utilisations (nécessite libcurl )

    • API HTTP (classe WP_Http_curl )
    • url_is_accessable_via_ssl()
    • SimplePie (remplacé par la classe WP_SimplePie_File )
    • GoogleSpell (du package TinyMCE, n'est-il pas utilisé?)
  • Date / heure - 367 utilisations

  • DOM - 6 utilisations (nécessite libxml )

    • iis7_rewrite_rule_exists()
    • iis7_delete_rewrite_rule()
    • iis7_add_rewrite_rule()
    • saveDomDocument()
  • POSIX Regex - 23 utilisations

  • Filtre - 2 utilisations

    • classe PHPMailer->ValidateAddress() (facultatif)
  • FTP - 72 utilisations

    • classe ftp_base
    • classe ftp (versions pure et sockets )
    • classe WP_Filesystem_FTPext
    • classe WP_Filesystem_ftpsockets
  • GD - 56 utilisations

    • wp-admin\includes\image-edit.php
    • wp-admin\includes\image.php
    • wp-includes\media.php
  • Hash - 6 utilisations

    • wp-includes\pluggable.php utilisations multiples (facultatif - repli dans wp-includes\compat.php )
  • iconv - 5 utilisations

    • classe SimplePie (facultatif)
    • wp_check_invalid_utf8() (facultatif)
    • wp-mail.php (facultatif)
  • JSON - 20 utilisations

    • facultatif, solutions de rechange dans wp-includes/compat.php
  • libxml - 4 utilisations

    • classe WP_oEmbed->_parse_xml() (facultatif)
    • SimplePie
  • Chaîne multi-octets - 29 utilisations

    • quelques retombées dans wp-includes/compat.php
  • MySQL - 60 utilisations

    • classe wpdb
    • class SimplePie_Cache (remplacé par la classe WP_Feed_Cache )
  • OpenSSL - 4 utilisations

    • classe PHPMailer
  • PCRE - 743 utilisations

  • SimpleXML - 1 utilisations

    • classe WP_oEmbed (semble optionnel)
  • Sockets - 64 utilisations

    • classe ftp ( sockets implémentation)
  • SPL - 3 utilisations

  • Tokenizer - 3 utilisations

    • wp_doc_link_parse() (facultatif)
  • Analyseur XML - 89 utilisations

  • XMLReader - 1 utilisations

    • SimplePie (semble facultatif)
  • Zlib - 30 utilisations

réponse donnée Rarst 13.02.2012 - 20:55
la source
26

La réponse à cette question pourrait être compliquée et très longue. Autant que je sache, il y aura également des différences entre les serveurs & OS (IIS, Apache) .. Je ne peux pas dire que la liste suivante est une liste COMPLETE, mais elle inclut certains de ceux que je connais et qui sont obligatoires:

  • Curl et CurlSSL : vous n'êtes pas sûr que ce soit REQUIRED , mais une grande partie du code WordPress l'utilisera si elle est disponible. Cependant, de nombreux plug-ins en ont besoin et / ou auront des fonctions limitées sans lui.

  • Exif : permet au gestionnaire de média de WordPress d'extraire des données Exif. sans images.

  • Gettext - Internationalisation de la localisation de la traduction .mo.

  • FTP : utilisé pour effectuer des mises à niveau de plug-ins et WordPress via FTP.

  • GD : vous n'avez pas besoin d'introduction, n'est-ce pas?

  • Iconv : conversions de jeux de caractères pour tout, de l'analyse du courrier à l'analyse RSS.

  • Mbregex et Mbstring - le nom est assez descriptif - fournissez des fonctions utilisées dans tous les sens: -)

  • Mcrypt : inutile pour wordpress, mais de nombreux plugins en ont besoin.

  • Mime Magic - Désapprouvé maintenant dans wordpress - mais il est toujours bon d’avoir une compatibilité avec le dos.

  • * Mysql et Mysql du système * - nous savons tous ce que c'est et pourquoi c'est nécessaire, non?

  • Openssl : cette bibliothèque est utilisée pour gérer les connexions de traitement. crypté avec des certificats SSL pour WordPress peut être en mesure de se connecter à n’importe quel emplacement crypté SSL (https).

  • POSIX : utilisé pour garantir que WordPress conserve correctement les autorisations et les droits sur les fichiers.

  • Vérification des informations sur le chemin : certaines configurations permanentes.

  • Pspell : fonctionnalités de vérification orthographique de TinyMCE,.

  • Sockets : gestion des connexions FTP et gestion du courrier AKA SMTP et POP dans WordPress.

  • Zip - Vous ne savez pas si REQUIRED - mais cette classe de création et d'extraction de fichiers zip compatible multi-plateforme sera utilisée par wordpress si disponible.

  • Zlib : utilisé dans de nombreux cas. exemple - compression de fichiers js et css. encore une fois, je ne suis pas sûr si REQUIRED mais nécessaire.

Comme indiqué ci-dessus - il ne s’agit nullement d’une liste COMPLETE - Elle a été compilée il ya environ un an - et pourrait avoir besoin d’être mise à jour. Nombre de ces fonctions ne sont pas exactement REQUIRED mais ADVISED . Dans de nombreux cas, wordpress utilisera une fonction SI elle est disponible et sinon, ignorera la tâche. Un bon exemple est le manque de librairie GD, cela n'empêchera pas wordpress de fonctionner, mais il ne coupera pas, ne redimensionnera pas et ne modifiera pas les images téléchargées, laissant ainsi l'original image à poster "fonction) ..

En remarque, je dirais également que cette question obtiendra probablement plus de réponses correctes / mises à jour sur serverfault.com qu'ici ...

    
réponse donnée krembo99 13.02.2012 - 10:27
la source
12

( Ceci n'est pas censé être une réponse. Juste quelques informations utiles. Si vous pensez que cette information n'est pas utile, faites-le moi savoir, je vais simplement la supprimer.)

Je pense qu'il serait plus facile pour les débutants de parler de packages , mais étant donné que les packages varient d'un système à l'autre, il est difficile de tous les couvrir.

Comme je connais bien Debian (et les distributions basées sur Debian), j'aimerais partager ces informations spécifiques:

  • php5-cli
  • php5-dev
  • php5-fpm
  • php5-cgi
  • php5-mysql
  • php5-xmlrpc
  • php5-curl
  • php5-gd
  • php-apc (non requis, mais recommandé)
  • php-pear
  • php5-imap
  • php5-mcrypt
  • php5-pspell

Les packages susmentionnés installent toutes les extensions / bibliothèques / modules mentionnés dans les autres réponses; tout, sauf Mime Magic, qui est n'est plus requis par WordPress .

Un autre bon moyen de vous assurer que votre serveur est compatible à 100% avec WordPress est de vérifier quels packages sont pré-installés par les entreprises d'hébergement hébergées . Forts de leurs années d'expérience dans le traitement des plaintes d'incompatibilités, les clients seront mieux informés.

Dans le cas de Hostgator , les modules PHP qu'ils préinstallent incluent (vous n'aurez probablement besoin que de < em> la plupart mais pas tous):

MediaTemplefournitunfichier phpinfo(); pour vérifier sa configuration. C’est utile aussi pour la comparaison.

    
réponse donnée its_me 10.02.2013 - 04:17
la source
6

J'ai développé mon vérificateur d'environnement WordPress. C'est une classe simple, fonctionnant sur le Web SAPI ou sur le CLI. Ceci est la version maintenue enlace

<?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$||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 ) );
    }
}

Basé sur le travail de @rarst

    
réponse donnée Szépe Viktor 24.11.2016 - 20:14
la source
4

Si vous voulez un moyen simple de vérifier si votre serveur répond à ces exigences, voici une commande ext de WP-CLI pratique faites-le.

wp ext required affiche toutes les extensions PHP nécessaires pour exécuter WordPress, tandis que wp ext recommended en affiche facultatif . wp ext check est une combinaison des deux commandes.

Elles sont pratiques lorsque vous avez besoin d’un moyen rapide de vérifier la configuration système requise sur un nouveau serveur et / ou si vous souhaitez traiter ultérieurement cette liste par programme.

Voici comment wp ext required fonctionne:

$ 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
    
réponse donnée swissspidy 18.01.2018 - 17:12
la source
3

Si vous utilisez Debian 7 (Debian Wheezy), vous devez installer PHP et un petit nombre d'extensions. La plupart de ce qui a été mentionné par @Rarst est déjà inclus dans l’une des installations PHP les plus élémentaires de Debian.

PHP

Vous avez quatre options dans Debian Wheezy: libapache2-mod-php5 , libapache2-mod-php5filter , php5-cgi ou php5-fpm . Je choisis php5-fpm mais tout dépend de la manière dont vous voulez que votre serveur web et PHP interagissent.

MySQL

Vous avez également besoin de PHP pour utiliser MySQL. Vos options sont php5-mysql et php5-mysqlnd . php5-mysqlnd est natif et généralement plus rapide. Certains pourraient choisir une alternative comme MariaDB.

Bibliothèque graphique Facultatif

Si vous souhaitez redimensionner vos images, vous pouvez installer php5-gd ou php5-imagick . php5-imagick vous donnera une meilleure qualité et Wordpress l'utilisera s'il est disponible. Si les deux sont installés, php5-imagick sera utilisé. Si aucun des deux n'est installé, les images ne seront pas redimensionnées (et Wordpress ne se plaindra pas).

HTTP Facultatif

Si vous installez php5-curl , il sera utilisé mais n'est pas obligatoire, sauf pour de meilleures performances. .

Wordpress et la plupart des extensions ne requièrent rien d’autre, bien que certaines extensions puissent avoir d’autres exigences.

Voici la ligne d’installation de base complète permettant à Wordpress de disposer de tout ce dont il a besoin pour obtenir des performances optimales, sans rien:

apt-get install php5-fpm php5-mysqlnd php5-imagick php5-curl
    
réponse donnée user55371 11.07.2014 - 00:31
la source
1

Une petite "feuille de calcul" lors de l'installation de PHP pour Wordpress sur Debian:

0. Ajouter le référentiel dotdeb

Ajoutez ces deux lignes à votre fichier /etc/apt/sources.list :

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Ajouter la clé GPG:

wget https://www.dotdeb.org/dotdeb.gpg
sudo apt-key add dotdeb.gpg

Mettre à jour la "liste de paquets":

sudo apt-get update

1. Installez PHP 7:

apt-get install php7.0-common libapache2-mod-php7.0 php7.0-cli

Source: enlace

2. Liste des modules inclus dans le package "php7.0-common":

/usr/lib/php/20151012/calendar.so
/usr/lib/php/20151012/ctype.so
/usr/lib/php/20151012/exif.so
/usr/lib/php/20151012/fileinfo.so
/usr/lib/php/20151012/ftp.so
/usr/lib/php/20151012/gettext.so
/usr/lib/php/20151012/iconv.so
/usr/lib/php/20151012/pdo.so
/usr/lib/php/20151012/phar.so
/usr/lib/php/20151012/posix.so
/usr/lib/php/20151012/shmop.so
/usr/lib/php/20151012/sockets.so
/usr/lib/php/20151012/sysvmsg.so
/usr/lib/php/20151012/sysvsem.so
/usr/lib/php/20151012/sysvshm.so
/usr/lib/php/20151012/tokenizer.so

Source: enlace

3. Pour installer les modules supplémentaires requis / recommandés par wordpress:

apt-get install php7.0-curl php7.0-gd php7.0-mbstring php7.0-mcrypt php7.0-pspell php7.0-zip

Source: enlace

4. Je n'ai pas trouvé le texte suivant sur debian:

Openssl
Path Info Check
Zlib

5. "apt-cache search php7" renvoie:

php7.0 - server-side, HTML-embedded scripting language (metapackage)
php7.0-apcu - APC User Cache for PHP
php7.0-apcu-bc - APCu Backwards Compatibility Module
php7.0-bcmath - Bcmath module for PHP
php7.0-bz2 - bzip2 module for PHP
php7.0-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.0-cli - command-line interpreter for the PHP scripting language
php7.0-common - documentation, examples and common module for PHP
php7.0-curl - CURL module for PHP
php7.0-dba - DBA module for PHP
php7.0-dbg - Debug symbols for PHP7.0
php7.0-dev - Files for PHP7.0 module development
php7.0-enchant - Enchant module for PHP
php7.0-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.0-gd - GD module for PHP
php7.0-geoip - GeoIP module for PHP
php7.0-gmp - GMP module for PHP
php7.0-igbinary - igbinary serializer for PHP
php7.0-imagick - Provides a wrapper to the ImageMagick library
php7.0-imap - IMAP module for PHP
php7.0-interbase - Interbase module for PHP
php7.0-intl - Internationalisation module for PHP
php7.0-json - JSON module for PHP
php7.0-ldap - LDAP module for PHP
php7.0-mbstring - MBSTRING module for PHP
php7.0-mcrypt - libmcrypt module for PHP
php7.0-memcached - memcached extension module for PHP, uses libmemcached
php7.0-mongodb - MongoDB driver for PHP
php7.0-msgpack - MessagePack serializer for PHP
php7.0-mysql - MySQL module for PHP
php7.0-odbc - ODBC module for PHP
php7.0-opcache - Zend OpCache module for PHP
php7.0-pgsql - PostgreSQL module for PHP
php7.0-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.0-pspell - pspell module for PHP
php7.0-readline - readline module for PHP
php7.0-recode - recode module for PHP
php7.0-redis - PHP extension for interfacing with Redis
php7.0-snmp - SNMP module for PHP
php7.0-soap - SOAP module for PHP
php7.0-sqlite3 - SQLite3 module for PHP
php7.0-ssh2 - Bindings for the libssh2 library
php7.0-sybase - Sybase module for PHP
php7.0-tidy - tidy module for PHP
php7.0-xdebug - Xdebug Module for PHP
php7.0-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP
php7.0-xmlrpc - XMLRPC-EPI module for PHP
php7.0-xsl - XSL module for PHP (dummy)
php7.0-zip - Zip module for PHP

Référence: enlace

    
réponse donnée JedatKinports 20.03.2017 - 10:57
la source
0

vous avez besoin des extensions mysqli, pdo et gd. et parfois xml-rpc.

Cela fait un moment que je fais tourner WP avec l'extension native mysqlnd, c'est plutôt chouette. Des éléments de réflexion sont intégrés, donc si vous voulez voir ce qui se passe avec la base de données dans cette requête spécifique, vous pouvez le faire.

zip car une extension n'est pas nécessaire, la plupart des programmes appellent l'exécutable zip du système.

    
réponse donnée Vid Luther 13.02.2012 - 16:10
la source

Lire d'autres questions sur les étiquettes