¿Cómo funciona la resolución de ruta de acceso en require_once?

Estaba escribiendo una aplicación web en PHP, cuando me encontré con una situación extraña. Para ilustrar mi problema, considere una aplicación web de esta estructura:

/
    index.php
    f1/
        f1.php
    f2/
        f2.php

Contenido de estos archivos:

index.php:

<?php require_once("f1/f1.php"); ?>

f1.php:

<?php require_once("../f2/f2.php"); ?>

f2.php: en blanco

Ahora, cuando intento abrir index.php en mi navegador, aparece este error:

Warning: require_once(../f2/f2.php) [function.require-once]: 
failed to open stream: No such file or directory in /var/www/reqtest/f1/f1.php on line 2
Fatal error: require_once() [function.require]: 
Failed opening required '../f2/f2.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/reqtest/f1/f1.php on line 2

¿Hay algo obvio que me falta? ¿Cómo funcionan las rutas de inclusión en PHP?

Antes de hacer esta pregunta, intenté experimentar y descubrir. Configuré otra prueba, así:

/
    index.php
    f1/
        f1.php
        f2.php

index.php:

<?php require_once("f1/f1.php"); ?>

f1.php:

<?php require_once("f2.php"); ?>

f2.php: en blanco

Para mi sorpresa (y confusión total), esto funcionó bien!

Entonces, ¿cuál es el secreto detrás de la resolución del camino?

Pd viesta pregunta, pero aún no responde el segundo caso que he expuesto aquí.

Respuestas a la pregunta(5)

Su respuesta a la pregunta