2011-02-07 13 views
10

Últimamente cuando estaba depurando algún archivo PHP con XDebug (bajo Eclipse en Ubuntu) me encontré con un comportamiento extraño:¿Cómo puedo obtener la magia PHP trabajo __FILE__ constante con Eclipse y PDT

print(__FILE__); 

resultó en

"xdebug eval" 

GEE!

Así que esta constante mágica parece no para trabajar con esto.

¿Alguien sabe una solución o una solución viable? ¿Cómo depurar el depurador? (Hardcoding a path es un PITA!)

Respuesta

-1

Cree un punto de interrupción en la línea print(__FILE__); y analice qué variables están disponibles para usted.

+1

Las constantes mágicas no son variables, el analizador las expande. – aexl

0

No fue una respuesta, pero probablemente podría usar __DIR__ en php 5.3.
UPD. Descubrió que a menudo no contiene lo que usted espera.

7

El resultado que obtiene no es incorrecto. __FILE__ es una constante especial que se evalúa en el tiempo del analizador. Cuando el script PHP se compila, sería realmente leer algo como esto:

// test.php 
<?php 
    "test.php"; 
?> 

a pesar de que la fuente de guión era:

// test.php 
<?php 
    __FILE__; 
?> 

Esto significa que después del análisis, no hay tal "constante" __FILE__ en absoluto, ya que ya ha sido reemplazado.

Esto significa que si lo hace en un entorno de desarrollo, a través de comandos de eval -- __FILE__ DBGp eval puede no darle la __FILE__ con cualquier nombre de archivo. En su lugar, utiliza el nombre de archivo para el contexto actual que es xdebug eval o en versiones posteriores, xdebug://debug-eval.

En esencia, es lo mismo que hacer esto:

php -r 'eval("__FILE__;");' 

Lo que también da salida:

Command line code(1) : eval()'d code 

Xdebug busca este tipo de formato, y lo cambia a xdebug://debug-eval de modo que pueda realmente depurar en el código evaluado.

__FILE__ funciona como espera en el código fuente de PHP, como se puede comprobar con este fragmento:

<?php $far = __FILE__; // now evaluate $far in your IDE ?> 
0

Sé que es una vieja cuestión. Lo solucioné asignándolo a una variable, ¡y funciona bien!

$file = __FILE__; 
include dirname($file) . '/../whateverfile.php'; 
Cuestiones relacionadas