Como remover $ _SERVER de uma determinada string em PHP

Como posso remover $_SERVER['DOCUMENT_ROOT'] de uma string como essa /home/bla/test/pic/photo.jpg

o resultado deve ser parecido com este /test/pic/photo.jpg

Eu também preciso tirar a foto.jpg de /test/pic/photo.jpg

Se o seu DocumentRoot corresponde à parte da string que deseja remover, uma solução pode ser usar str_replace :

 echo str_replace($_SERVER['DOCUMENT_ROOT'], '', '/home/bla/test/pic/photo.jpg'); 

Mas note que você entrará em problemas no conteúdo de $_SERVER['DOCUMENT_ROOT'] está presente em algum outro lugar em sua string: ele será removido, cada vez.

Se você quer se certificar de que só é removido do início da string, uma solução poderia ser usar alguns regex:

 $docroot = '/home/bla'; $path = '/home/bla/test/pic/photo.jpg'; echo preg_replace('/^' . preg_quote($docroot, '/') . '/', '', $path); 

Observe o ^ no início do regex (para indicar que ele só deve corresponder no início da string) – e não se esqueça de escaping dos caracteres especiais da sua raiz do documento, usando preg_quote .

E para obter o nome de um arquivo quando você possui um caminho que contém diretório + nome, você pode usar a function basename ; por exemplo, esta porção de código:

 echo basename('/test/pic/photo.jpg'); 

Dá-lhe esta saída:

 photo.jpg 
 $new_string = str_replace($_SERVER['DOCUMENT_ROOT'], '', $string); $photo = basename($string); 

Links:
http://de.php.net/str_replace
http://de.php.net/basename

………

 echo basename(str_replace($_SERVER['DOCUMENT_ROOT'], '', '/home/bla/test/pic/photo.jpg')); // output: photo.jpg