Проверьте, существует ли включение (или требуют)

Как Вы проверяете, существует ли включение / require_once перед вызовом его я пытался поместить его в ошибочный блок, но PHP не нравилось это.

Я думаю file_exists() работал бы с некоторым усилием, однако который потребует целого пути к файлу, и родственник включает, не мог быть передан в него легко.

Есть ли какие-либо другие пути?

44
задан Alix Axel 12 February 2010 в 15:20
поделиться

3 ответа

Я полагаю, что file_exists работает с относительными путями, хотя вы также можете попробовать что-то в этом роде...

if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");

... нет необходимости говорить, что вы можете заменить исключение на любой метод обработки ошибок по вашему выбору. Идея здесь в том, что if-заявление проверяет, может ли файл быть включен, а любые сообщения об ошибках, обычно выводимые include, подавляются префиксом @.

56
ответ дан 26 November 2019 в 22:03
поделиться

file_exists будет работать с проверкой, существует ли требуемый файл относительно текущего рабочего каталога, поскольку он отлично работает с относительными путями. Однако, если включаемый файл находился в другом месте на PATH, вам нужно будет проверить несколько путей.

function include_exists ($fileName){
    if (realpath($fileName) == $fileName) {
        return is_file($fileName);
    }
    if ( is_file($fileName) ){
        return true;
    }

    $paths = explode(PS, get_include_path());
    foreach ($paths as $path) {
        $rp = substr($path, -1) == DS ? $path.$fileName : $path.DS.$fileName;
        if ( is_file($rp) ) {
            return true;
        }
    }
    return false;
}
6
ответ дан 26 November 2019 в 22:03
поделиться

file_exists() работает с относительными путями, она также проверяет, существуют ли каталоги. Используйте is_file() вместо этого:

if (is_file('./path/to/your/file.php'))
{
    require_once('./path/to/your/file.php');
}
5
ответ дан 26 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: