php dilinde dizinleri doğru şekilde oluşturulup yığın oluşmadan düzenlenmesi için iki yolu birleştiren fonksiyonlar sıklıkla kullanılır.
iki farklı yol birleştirlirken birden fazla farklı ifade ile karşılaşılabilir. farklı durumların oluşması sistemin aksamasına hatalı işlemler oluşmasına hatta sistem açığı oluşmasına bile sebep olabilir. Bu sebeple iyi düşünülmüş ve en çok ihtimali göz önünde bulunduran fonksiyonlar kulanılmalıdır.
örnek çıktılar ve kullanımlar aşağıdaki gibidir.
iki farklı yol birleştirlirken birden fazla farklı ifade ile karşılaşılabilir. farklı durumların oluşması sistemin aksamasına hatalı işlemler oluşmasına hatta sistem açığı oluşmasına bile sebep olabilir. Bu sebeple iyi düşünülmüş ve en çok ihtimali göz önünde bulunduran fonksiyonlar kulanılmalıdır.
Kod:
function path($base, $com = null, $isReal = false)
{
if(substr($base, -1)!=DIRECTORY_SEPARATOR) $base.=DIRECTORY_SEPARATOR;
if($com) $base.=$com;
$base = preg_replace('/(\/+|\\\\+)/', DIRECTORY_SEPARATOR, $base);
while(preg_match('/(\/[\w\s_-]+\/\.\.)/', $base)){
$base = preg_replace('/(\/[\w\s_-]+\/\.\.)/', "", $base);
if(preg_match('/\/\.\.\//', $base))
throw new \Exception("Error directory don't have parent folder!", 1);
}
if($isReal){
$base = realpath($base);
if(is_dir($base)) $base .= DIRECTORY_SEPARATOR;
}
return $base;
}
Kod:
var_dump(path("www///system", "Combine/../"));
// string(11) "www/system/"
var_dump(path("System", "Combine/../", true));
// string(40) "/home/snow/Desktop/localhost/www/System/"
var_dump(path("System", "Combine", true));
// string(48) "/home/snow/Desktop/localhost/www/System/Combine/"
var_dump(path("System", "Combine/notPath", true)); // eğer belirtilen dizin yoksa false ile dönüş yapar
// bool(false)
var_dump(path("System", "Combine/class.Combine.php", true)); // sadece klasör değil dosya dizinlerinide seçebilirsiniz
//string(65) "/home/snow/Desktop/localhost/www/System/Combine/class.Combine.php"
var_dump(path("/home/testuser\\badPath///////repair"));
// string(30) "/home/testuser/badPath/repair/"