Include (veya ihtiyaç) olup olmadığını kontrol edin

5 Cevap php

Onu aramak önce include / Require_once olup olmadığını nasıl kontrol edebilirim, ben bir hata bloğuna koyarak denedim, ama PHP gibi değildi.

I file_exists() tüm dosya yolunu gerektirecek Ancak, biraz çaba ile çalışmak düşünüyorum, ve göreli kolaylıkla içine geçilememesi içerir.

Başka yolları var mı?

5 Cevap

Ayrıca bu satırlar boyunca bir şey deneyebilirsiniz ama ben, file_exists göreli yolları ile çalışır inanıyorum ...

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

Gereksiz ... sizin seçtiğiniz herhangi bir hata işleme yöntemi için durum yerine olabilir, demek. Burada fikir, if-deyim dosya dahil edilebilir olup olmadığını doğrular ve bu normalde include @ ile önek baskılanmaktadır tarafından çıkarılan herhangi bir hata iletileri .

Ayrıca dahil dosyasında tanımlanan herhangi değişkenler, işlevler veya sınıflar için kontrol edin ve amele eklerseniz görebilirsiniz.

if (isset($variable)) { /*code*/ }

VEYA

if (function_exists('function_name')) { /*code*/ }

VEYA

if (class_exists('class_name')) { /*code*/ }

file_exists göreli yollar ile çalışıyor gibi geçerli çalışma dizinine göreli olduğunda gerekli dosya varsa kontrol ile çalışmak istiyorsunuz. Dosya başka PATH oldu eklerseniz Ancak, çeşitli yolları kontrol etmesi gerekir.

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;
}

file_exists() göreli yollar ile çalışır dizinleri varsa, o da kontrol edeceğiz. is_file() yerine kullanın:

if (is_file('./path/to/your/file.php'))
{
    require_once('./path/to/your/file.php');
}

Check out the stream_resolve_include_path function, it searches with the same rules as include().

http://php.net/manual/en/function.stream-resolve-include-path.php