php_sapi_name, pour des includes dynamiques ?
By Geoffrey on Monday 29 May 2006, 12:58 - Coding - Permalink
Tout a l'heure je me suis dis que j'aurai bien voulu faire un include en fonction du SAPI dans lequel un script s'execute. Comme PHP est (presque) bien fait, il existe la fonction php_sapi_name qui retourne le nom du SAPI courant. Ce qui nous permet de faire quelque chose comme:
$sapi_include = dirname(__FILE__) . '/sapi/'.php_sapi_name().'.php'; $sapi_default = dirname(__FILE__) . '/sapi/default.php'; if (file_exists($sapi_include)) { require_once $sapi_include; } else if (file_exists($sapi_default)) { require_once $sapi_default; }
C'est pas très joli, mais ça fonctionne. Le gros avantage, c'est qu'on a des includes spécifiques au SAPI, et donc on aura par exemple, dans sapi/apache2handler.php:
header('Content-Type: text/html; charset=ISO-8859-15'); require_once 'libraries/Template.php'; session_start();
et dans sapi/cli.php:
Var_Dump::displayInit(array('display_mode' => 'text'));
Le problème, résolu par l'utilisation de sapi/default.php, était que faire un fichier par SAPI possible serait fastidieux (il faut connaitre le nom de tous les SAPI disponibles (bon ok c'est disponible ici mais cette liste n'a rien d'officiel) puis faire un fichier pour chaque.
Maintenant la question que je me (et vous) pose, c'est: y'a-t'il des effets secondaires que je n'aurai pas encore remarqué ?
Comments
Rien capté, c quoi le but ? :D
Le but c'est d'avoir un prepend commun a tous les sapi (dans lequel on se connecte a une db par exemple) qui inclut des prepend spécifiques au sapi courant (si on est executé via apache, on set des headers spécifiques, si on est en cli, on conf des libs spécifiques, etc)
jte montrerai quand t'arrivera au bureau :p
Oui bon, t'étais pas au bureau à 3h du mat hier toi !!!
* attend l'explication *