Программное обнаружение груш в PHP - PullRequest
2 голосов
/ 30 ноября 2010

Один из моих скриптов нуждается в PEAR для некоторых дополнительных функций. Мне нужен способ определить, установлен ли PEAR в самом PHP. Поскольку PEAR.php будет в пути включения, если он правильно установлен, я полагаю, что я могу проверить наличие PEAR.php с помощью file_exists(), а затем проверить наличие класса PEAR внутри него, чтобы попытаться определить, действительно ли это файл I хочу. Звучит ужасно хакерски и ненадежно.

Кто-нибудь может предложить лучший или улучшенный подход?

Ответы [ 4 ]

8 голосов
/ 06 сентября 2012

Вы можете попробовать использовать следующую настройку, а не использовать 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';
}

Сложность в том, что PEAR, скорее всего, будет добавлен к текущему пути включения. Вот почему вы можете использовать System.php, а не /path/to/pear/System.php. Таким образом, вы можете выяснить, установлен ли PEAR.

4 голосов
/ 30 ноября 2010

Вы можете проверить, установлен ли PEAR, запросив файл System.php, чтобы проверить, существует ли класс. Этот метод может быть выполнен в соответствии с инструкциями здесь: http://pear.php.net/manual/en/installation.checking.php

System.php поставляется с каждой установкой PEAR, так что это будет простой способ обнаружить ее.

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

Надеюсь, это поможет вам!

1 голос
/ 04 сентября 2012
<?php 
if(@include_once("System.php"))
{
    echo "Pear is installed";
}
else
{
    echo "Nope";
}
?>
0 голосов
/ 30 июня 2012

Код выше не верный.Вы должны использовать это так:

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