[SPIP] +2.1.12
[velocampus/web/www.git] / www / ecrire / inc / charger_php_extension.php
diff --git a/www/ecrire/inc/charger_php_extension.php b/www/ecrire/inc/charger_php_extension.php
new file mode 100644 (file)
index 0000000..35f1722
--- /dev/null
@@ -0,0 +1,68 @@
+<?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);
+}
+?>