Browse Source

Ticket #4060 : nettoyage de code. On ne peut plus vraiment charger dynamiquement de librairies PHP (dans la plupart des cas). On déprécie donc la fonction qui s’en chargeait auparavant,

pour préférer la fonction de test native de présence de l’extension (extension_loaded). De toutes façons une coquille dans r22163 (spip 3.1-beta) avait déjà tué le truc.
balise_svg_xml
Matthieu Marcillaud 5 years ago
parent
commit
98daf063ed
  1. 56
      ecrire/inc/charger_php_extension.php
  2. 10
      ecrire/inc/utils.php
  3. 4
      ecrire/req/mysql.php
  4. 4
      ecrire/req/pg.exp.php
  5. 4
      ecrire/req/sqlite_generique.php

56
ecrire/inc/charger_php_extension.php

@ -11,20 +11,12 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
/**
* Permet de charger un module PHP dont le nom est donné en argument
*
* Fonction adaptée de phpMyAdmin.
*
* Trois étapes :
*
* 1) si le module est deja charge, on sort vainqueur
* 2) on teste si l'on a la possibilité de charger un module
* via la meta `dl_allowed`. Si elle n'est pas renseignée,
* elle sera crée en fonction des paramètres de php
* 3) si l'on peut, on charge le module par la fonction `dl()`
* Permettait de charger un module PHP dont le nom est donné en argument
*
* @deprecated Utiliser la fonction native `extension_loaded($module)`
* @note
* La fonction `dl()` n'est plus présente à partir de PHP 5.3.
* La fonction `dl()` n'est plus active à partir de PHP 5.3.
* On ne peut plus charger à la volée les modules PHP (hors CLI dans certaines configurations)
*
* @param string $module
* Nom du module à charger (tel que 'mysql')
@ -35,43 +27,5 @@ function inc_charger_php_extension_dist($module) {
if (extension_loaded($module)) {
return true;
}
// A-t-on le droit de faire un dl() ; si on peut, on memorise la reponse,
// lourde a calculer, dans les meta
if (!isset($GLOBALS['meta']['dl_allowed'])) {
if (!@ini_get('safe_mode')
&& @ini_get('enable_dl')
&& @function_exists('dl')
) {
ob_start();
phpinfo(INFO_GENERAL); /* Only general info */
$a = strip_tags(ob_get_contents());
ob_end_clean();
if (preg_match('@Thread Safety[[:space:]]*enabled@', $a)) {
if (preg_match('@Server API[[:space:]]*\(CGI\|CLI\)@', $a)) {
$GLOBALS['meta']['dl_allowed'] = true;
} else {
$GLOBALS['meta']['dl_allowed'] = false;
}
} else {
$GLOBALS['meta']['dl_allowed'] = true;
}
} else {
$GLOBALS['meta']['dl_allowed'] = false;
}
// Attention, le ecrire_meta() echouera si on le tente ici ;
// donc on ne fait rien, et on attend qu'un prochain ecrire_meta()
// se produisant apres cette sequence enregistre sa valeur.
#include_spip('inc/meta');
#ecrire_meta('dl_allowed', $GLOBALS['meta']['dl_allowed'], 'non');
}
if (!$GLOBALS['meta']['dl_allowed']) {
return false;
}
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' : '';
return @dl($prefix . $module_file . PHP_SHLIB_SUFFIX);
return false;
}

10
ecrire/inc/utils.php

@ -3325,25 +3325,21 @@ function tester_url_ecrire($nom) {
/**
* Tente de charger dynamiquement une extension PHP
* Teste la présence d’une extension PHP
*
* @deprected Utiliser directement la fonction native `extension_loaded($module)`
* @example
* ```
* $ok = charger_php_extension('sqlite');
* ```
* @uses inc_charger_php_extension_dist() Si la librairie n'est pas déjà charchée
*
* @param string $module Nom du module à charger
* @return bool true si le module est chargé
**/
function charger_php_extension($module) {
if (extension_loaded($module)) {
return true;
} else {
$charger_php_extension = charger_fonction('charger_php_extension', 'inc');
return $charger_php_extension($module);
}
return false;
}

4
ecrire/req/mysql.php

@ -41,7 +41,7 @@ if (!defined('_MYSQL_NOPLANES')) {
* - tableau décrivant la connexion sinon
*/
function req_mysql_dist($host, $port, $login, $pass, $db = '', $prefixe = '') {
if (!charger_php_extension('mysqli')) {
if (!extension_loaded('mysqli')) {
return false;
}
if ($port) {
@ -1711,8 +1711,6 @@ function spip_release_lock($nom) {
* True si on a les fonctions, false sinon
*/
function spip_versions_mysql() {
charger_php_extension('mysqli');
return function_exists('mysqli_query');
}

4
ecrire/req/pg.exp.php

@ -33,7 +33,7 @@ define('_DEFAULT_DB', 'spip');
// http://code.spip.net/@req_pg_dist
function req_pg_dist($addr, $port, $login, $pass, $db = '', $prefixe = '') {
static $last_connect = array();
if (!charger_php_extension('pgsql')) {
if (!extension_loaded('pgsql')) {
return false;
}
@ -1535,7 +1535,5 @@ function mysql2pg_type($v) {
// Renvoie false si on n'a pas les fonctions pg (pour l'install)
// http://code.spip.net/@spip_versions_pg
function spip_versions_pg() {
charger_php_extension('pgsql');
return function_exists('pg_connect');
}

4
ecrire/req/sqlite_generique.php

@ -2242,14 +2242,14 @@ function _sqlite_charger_version($version = '') {
// version 2
if (!$version || $version == 2) {
if (charger_php_extension('sqlite')) {
if (extension_loaded('sqlite')) {
$versions[] = 2;
}
}
// version 3
if (!$version || $version == 3) {
if (charger_php_extension('pdo') && charger_php_extension('pdo_sqlite')) {
if (extension_loaded('pdo') && extension_loaded('pdo_sqlite')) {
$versions[] = 3;
}
}

Loading…
Cancel
Save