[SPIP] ~maj v2.1.25-->2.1.26
[velocampus/web/www.git] / www / ecrire / inc / charger_php_extension.php
1 <?php
2
3 if (!defined('_ECRIRE_INC_VERSION')) return;
4
5 // cette fonction (adaptee de phpMyAdmin)
6 // permet de charger un module php
7 // dont le nom est donne en argument (ex: 'mysql')
8 // retourne true en cas de succes
9 //
10 // 3 etapes :
11 // - 1) si le module est deja charge, on sort vainqueur
12 // - 2) on teste si l'on a la possibilite de charger un module
13 // via la meta 'dl_allowed'. Si elle n'est pas renseignee,
14 // elle sera cree en fonction des parametres de php
15 // - 3) si l'on peut, on charge le module par la fonction dl()
16 //
17 // http://doc.spip.org/@inc_charger_php_extension_dist
18 function inc_charger_php_extension_dist($module){
19 if (extension_loaded($module)) {
20 return true;
21 }
22
23 // A-t-on le droit de faire un dl() ; si on peut, on memorise la reponse,
24 // lourde a calculer, dans les meta
25 if (!isset($GLOBALS['meta']['dl_allowed'])) {
26 if (!@ini_get('safe_mode')
27 && @ini_get('enable_dl')
28 && @function_exists('dl')) {
29 ob_start();
30 phpinfo(INFO_GENERAL); /* Only general info */
31 $a = strip_tags(ob_get_contents());
32 ob_end_clean();
33 if (preg_match('@Thread Safety[[:space:]]*enabled@', $a)) {
34 if (preg_match('@Server API[[:space:]]*\(CGI\|CLI\)@', $a)) {
35 $GLOBALS['meta']['dl_allowed'] = true;
36 } else {
37 $GLOBALS['meta']['dl_allowed'] = false;
38 }
39 } else {
40 $GLOBALS['meta']['dl_allowed'] = true;
41 }
42 } else {
43 $GLOBALS['meta']['dl_allowed'] = false;
44 }
45
46 // Attention, le ecrire_meta() echouera si on le tente ici ;
47 // donc on ne fait rien, et on attend qu'un prochain ecrire_meta()
48 // se produisant apres cette sequence enregistre sa valeur.
49 #include_spip('inc/meta');
50 #ecrire_meta('dl_allowed', $GLOBALS['meta']['dl_allowed'], 'non');
51 }
52
53 if (!$GLOBALS['meta']['dl_allowed']) {
54 return false;
55 }
56
57 /* Once we require PHP >= 4.3, we might use PHP_SHLIB_SUFFIX here */
58 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
59 $module_file = 'php_' . $module . '.dll';
60 } elseif (PHP_OS=='HP-UX') {
61 $module_file = $module . '.sl';
62 } else {
63 $module_file = $module . '.so';
64 }
65
66 return @dl($module_file);
67 }
68 ?>