1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/spip_ynh.git synced 2024-09-03 20:25:59 +02:00
spip_ynh/sources/ecrire/inc/charger_php_extension.php
2015-04-28 17:10:23 +02:00

68 lines
2 KiB
PHP

<?php
if (!defined('_ECRIRE_INC_VERSION')) return;
// cette fonction (adaptee de phpMyAdmin)
// permet de charger un module php
// dont le nom est donne en argument (ex: 'mysql')
// retourne true en cas de succes
//
// 3 etapes :
// - 1) si le module est deja charge, on sort vainqueur
// - 2) on teste si l'on a la possibilite de charger un module
// via la meta 'dl_allowed'. Si elle n'est pas renseignee,
// elle sera cree en fonction des parametres de php
// - 3) si l'on peut, on charge le module par la fonction dl()
//
// http://doc.spip.org/@inc_charger_php_extension_dist
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;
}
/* Once we require PHP >= 4.3, we might use PHP_SHLIB_SUFFIX here */
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$module_file = 'php_' . $module . '.dll';
} elseif (PHP_OS=='HP-UX') {
$module_file = $module . '.sl';
} else {
$module_file = $module . '.so';
}
return @dl($module_file);
}
?>