2010-11-30 32 views
2

Un de mes scripts nécessite PEAR pour certaines fonctionnalités supplémentaires. J'ai besoin d'un moyen que je peux détecter si PEAR est installé dans PHP lui-même. Puisque PEAR.php serait dans le chemin d'inclusion s'il est correctement installé, je suppose que je pourrais vérifier l'existence de PEAR.php avec file_exists() puis vérifier la classe PEAR à l'intérieur pour essayer de déterminer si c'est réellement le fichier que je veux. Cela semble terriblement hackish et peu fiable cependant.Détection par programme de PEAR dans PHP

Quelqu'un peut-il suggérer une approche meilleure ou améliorée?

Répondre

4

Vous pouvez vérifier si PEAR est installé en demandant le fichier System.php pour voir si la classe existe. Cette méthode peut être effectuée comme indiqué ici: http://pear.php.net/manual/en/installation.checking.php

System.php est livré avec chaque installation PEAR, ce serait donc un moyen facile de le détecter.

<?php 
require_once 'System.php'; 
if(class_exists('System')===true) { 
    echo 'PEAR is installed!'; 
} else { 
    echo 'PEAR is not installed :('; 
} 
?> 

Espérons que ce soit utile!

+1

Mais si System.php n'existait pas, le script ne donnerait-il pas une erreur fatale? –

+0

Je voulais juste noter que 'if (class_exists ('System') === true)' peut être court-circuité en tant que 'if (class_exists ('System'))' mais je l'ai défini de cette façon juste pour vous donner un exemple . –

+0

Ah, c'est vrai. Vous pouvez utiliser 'if (file_exists ('System.php')) {include ('System.php'); } 'à la place pour s'assurer que les erreurs n'apparaissent pas dans le script. –

0

Le code ci-dessus n'est pas correct. Vous devriez l'utiliser comme ceci:

<?php 
include 'System.php'; 
if(class_exists('System')===true) { 
    echo 'PEAR is installed!'; 
} else { 
    echo 'PEAR is not installed :('; 
} 
?> 
1
<?php 
if(@include_once("System.php")) 
{ 
    echo "Pear is installed"; 
} 
else 
{ 
    echo "Nope"; 
} 
?> 
8

Vous pouvez essayer d'utiliser la configuration suivante, plutôt que d'utiliser file_exists:

$filePath = stream_resolve_include_path('System.php'); 
if ($filePath !== false) 
{ 
    require_once('System.php'); // you could use $filePath as well 
    echo 'PEAR installed'; 
} 
else 
{ 
    echo 'PEAR not installed'; 
} 

La partie délicate est, PEAR sera très probablement ajouté à le chemin d'inclusion actuel. C'est la raison pour laquelle vous pouvez utiliser System.php et pas /path/to/pear/System.php. De cette façon, vous pouvez déterminer si PEAR est déjà installé.