PHP bölü kurtulmak tam yol

2 Cevap php

Ben bunu belirli düzeylerde kaldırmak istiyorum tam bir yol var. Bu yüzden, örneğin,

/home/john/smith/web/test/testing/nothing/

Ben 4 düzeyleri kurtulmak istiyorum, bu yüzden olsun

/test/testing/nothing/

Ne Bunu yapmanın iyi olacağını?

Teşekkürler

2 Cevap

Basit bir çözüm bölüme yolunu dilim, ve sonra tekrar bir araya geri yapışmasını önce dizi manipüle etmektir:

join("/", array_slice(explode("/", $path), 5));

Bu belirli yolu kaldırmak istiyorsa tabii ki, aynı zamanda normal bir ifade kullanabilirsiniz:

preg_replace('~^/home/john/smith/web/~', '', $path);

Tavsiye bir kelime olsa. Uygulama yolları ile etrafında bir sürü hokkabazlık ise mantığını saklanması yerine, her yerde dize manipülasyonlar bir şey var, böylece bu, yolları temsil edecek bir sınıf oluşturmak için iyi bir fikir olabilir. Mutlak ve göreli yolları karıştırın Bu, özellikle iyi bir fikirdir.

Neden hepiniz kesinlikle hiçbir eşleştirme gerektiren bir şey için düzenli ifadeler kullanıyor; CPU döngülerini değerlidir!

str_replace daha verimli olacaktır:

$s_path = '/home/john/smith/web/test/testing/nothing/';
$s_path = str_replace('john/smith/web/test/', '', $s_path);

Ve kullanmak realpath() herhangi bir '../../' yolları çözmek için.

Ve dirname(__FILE__) CWD alır ve rtrim() bölü çizgisi kaldırmak için son derece yararlı olduğunu unutmayın ..