Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bibliotheques Php

3 réponses
Avatar
Vincent Hiribarren
Bonjour à tous,

je ne trouve pas de réponses dans la doc de php, aussi je m'en remets à
vous : existe-t-il un système pour utiliser des bibliothèques Php qui
sont dans des répertoires spéciaux, en ne donnant pas le chemin
complet des bibliothèques ?

Je m'explique : actuellement, le seul système que je vois pour
utiliser des fonctions contenues dans un fichier donné, c'est de faire
un "include" ou "require" de ce fichier dans un autre. Il faut cependant
donner le chemin d'accès du fichier, qu'il soit relatif ou absolu.

Or, j'aimerai accéder à la bibliothèque sans savoir où elle est, comme
un "#include <machin>" en C indiquant un fichier dans un répertoire
par défaut, dont je ne connais pas forcément le chemin.

Ainsi, une page web pourra utiliser la bibliothèque Php meme si on
change la page web de répertoire (dans le cas d'un notation relative
pour accéder à la bibliothèque).

Ah oui aussi, il y a moyen de compiler des fonctions qui servent pour
toutes les pages webs d'un site, pour éviter qu'elles ne soient
réinterprétées à chaque fois ?

Merci pour vos réponses.

--
Un peu d'aléa dans ce monde de fatalité.
http://www.alea.net/usenet/

3 réponses

Avatar
Frederic BISSON
Bonjour à tous,
Bonjour à toi !


Or, j'aimerai accéder à la bibliothèque sans savoir où elle est, comme
un "#include <machin>" en C indiquant un fichier dans un répertoire
par défaut, dont je ne connais pas forcément le chemin.
Il y a la directive include_path pour cela.

Elle doit figurer dans le fichier php.ini (une ligne doit déjà exister,
avec ou sans commentaire)

Exemple :
include_path = ".:/srv/www/inc:/srv/www/generateur"

Ah oui aussi, il y a moyen de compiler des fonctions qui servent pour
toutes les pages webs d'un site, pour éviter qu'elles ne soient
réinterprétées à chaque fois ?
Il me semble que PHP dispose déjà d'un cache en la matière.

Tu peux également te renseigner du côté du Zend Optimizer.

@+

Frédéric

Avatar
Sebastien
Vincent Hiribarren wrote:
je ne trouve pas de réponses dans la doc de php, aussi je m'en remets à
vous : existe-t-il un système pour utiliser des bibliothèques Php qui
sont dans des répertoires spéciaux, en ne donnant pas le chemin
complet des bibliothèques ?


À priori non, mais...
- Tu peux peux déterminer dans le include_path du php.ini les
répertoires qui seront testés à chaque inclusion. Mais je ne te
conseille pas cette solution, tous les hébergeurs ne permettent pas la
màj du php.ini ou même les fonctions ini_set( ) / set_include_path( ).
Bref cela rend l'appli sensible à une config externe.
- Il existe à partir de *PHP5* une fonction magique __autoload( ) qui
reçoit en paramète le nom d'une classe que tu as tenté d'instancier. Tu
peux donc faire :

function __autoload($className) {
require_once ROOT . "mesClasses/$className.class.php" ;
}

Et dans n'importe quelle page incluant __autoload( ) :

$monInstance = new UneClasse( ) ;

... sans faire aucune inclusion, c'est __autoload( ) qui s'en chargera.
!! Uniquement à partir de PHP5.

Or, j'aimerai accéder à la bibliothèque sans savoir où elle est, comme
un "#include <machin>" en C indiquant un fichier dans un répertoire
par défaut, dont je ne connais pas forcément le chemin.


#include <machin.h> ou #include <rep/machin.h> si machin.h est dans le
sous-répertoire rep du répertoire par défaut.
=> Tu dois toujours connaître l'arborescence. Finalement ça revient au
même qu'un include_path.

Ainsi, une page web pourra utiliser la bibliothèque Php meme si on
change la page web de répertoire (dans le cas d'un notation relative
pour accéder à la bibliothèque).


Mouais bof, théoriquement tu choisis une structure, tu dois t'y tenir.
Comment je fais : j'inclue un fichier de config qui initialise les
chemins absolus dont je peux avoir besoin dans chacune de mes pages.
Avec une arbo du type :

/
/inc/
/lib/
/lib/persoLib/
/lib/persoLib2/
/rep/

Cela peut donner :

/inc/config.inc.php
============================================ <?php
define('ROOT', realpath(dirname(__FILE__) . '/..') . '/') ;
define('ROOT_INC', ROOT . 'inc/') ; // Fichiers inclus
define('ROOT_LIB', ROOT . 'lib/') ; // Bibliothèques
...
?>
============================================
/index.php
============================================ <?php
require_once 'inc/config.inc.php' ; // Seule instruction sensible
require_once ROOT_LIB . 'persoLib2/index.php' ; // Toujours Ok
?>
============================================
/rep/index.php
============================================ <?php
require_once '../inc/config.inc.php' ;
require_once ROOT_LIB . 'persoLib2/index.php' ;
?>
============================================
Ah oui aussi, il y a moyen de compiler des fonctions qui servent pour
toutes les pages webs d'un site, pour éviter qu'elles ne soient
réinterprétées à chaque fois ?


Voir la création d'extensions avec l'API Zend : http://www.php.net/zend

Avatar
Arius
Sebastien wrote:
- Il existe à partir de *PHP5* une fonction magique __autoload( ) qui
reçoit en paramète le nom d'une classe que tu as tenté d'instancier. Tu
peux donc faire :

function __autoload($className) {
require_once ROOT . "mesClasses/$className.class.php" ;
}

Et dans n'importe quelle page incluant __autoload( ) :

$monInstance = new UneClasse( ) ;

... sans faire aucune inclusion, c'est __autoload( ) qui s'en chargera.
!! Uniquement à partir de PHP5.


Bonjour,
et merci pour l'info
je crois que j'avais pas bien compris
combien cette fonctionnalité était "magique" comme tu dis
vais m'y pencher un peu plus serieusement

Arius