variable solucion nombre index error php hiphop

solucion - Con HipHop para PHP, ¿qué pasa con los errores de PHP?



undefined index php post (1)

HipHop compila PHP en un ejecutable de C. ¿Qué pasa con los errores de PHP?

¿Es eso más difícil de depurar?

Edición: Revisé la documentación pero no encontré nada.


Hice un par de pruebas rápidas (no he tenido tiempo de jugar con hiphop tanto como me gustaría, desafortunadamente ;-() ; aquí están los resultados que obtuve:


En primer lugar, aquí está el contenido de test-2.php , que contiene un error de análisis:

<?php echo "what with a parse error ?

Nota: la cadena no está terminada


Tratando de ejecutar eso con PHP, obtengo:

$ php test-2.php PHP Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in /home/squale/temp/hiphop-php/tests/test-2.php on line 5 Parse error: syntax error, unexpected $end, expecting T_VARIABLE or T_DOLLAR_OPEN_CURLY_BRACES or T_CURLY_OPEN in /home/squale/temp/hiphop-php/tests/test-2.php on line 5


Tratando de compilar eso con hiphop, obtengo:

$ /home/squale/temp/hiphop-php/hiphop-php/src/hphp/hphp test-2.php --keep-tempdir=1 --log=3 running hphp... creating temporary directory /tmp/hphp_JdsWcU ... parsing inputs... parsing ./test-2.php... parsing inputs took 0''00" (0 ms) wall time running hphp took 0''00" (154 ms) wall time Exception: Unable to parse file: ./test-2.php (Line: 5, Char: 0): syntax error, unexpected $end

es decir, el archivo con el error de análisis no se compila, lo que es razonable.

El mensaje de error tiene algunas informaciones que estaban presentes en el mensaje de error de PHP, pero no exactamente tan precisa ...

Lo que significa que es posible que desee probar con PHP antes de intentar compilar su aplicación con hiphop: el mensaje de error dado por PHP fue más descriptivo.


Ahora, probemos con algunos errores / advertencias en tiempo de ejecución; Aquí está el contenido de test-1.php :

<?php error_reporting(E_ALL); ini_set(''display_errors'', ''On''); if ($_GET[''test''] == ''1'') { $data = (object)array(10); echo $data[0]; } else if ($_GET[''test''] == ''2'') { echo 10/0; } else if ($_GET[''test''] == ''3'') { file_put_contents(''/bin/non-allowed'', ''hello !''); } echo "plop/n";

Al intentar ejecutar ese archivo desde Apache + PHP, obtendrías tres errores posibles:
(Copié el archivo a la raíz de mi documento, lo que significa que las rutas no serán las mismas para los errores con Apache)

En primer lugar, llamando a http://localhost/temp/test-1.php?test=1 Me sale:

Fatal error: Cannot use object of type stdClass as array in /home/squale/developpement/tests/temp/test-1.php on line 8

Y, al intentar http://localhost/temp/test-1.php?test=2 , obtengo:

Warning: Division by zero in /home/squale/developpement/tests/temp/test-1.php on line 10 plop

Y, finalmente, con http://localhost/temp/test-1.php?test=3 , obtengo:

Warning: file_put_contents(/bin/non-allowed) [function.file-put-contents]: failed to open stream: Permission denied in /home/squale/developpement/tests/temp/test-1.php on line 12 plop


Ahora, compilando ese archivo de test-1.php con hiphop y ejecutándolo en modo de servidor web, recibo esto durante la fase de compilación, lo que significa que está bien:

$ /home/squale/temp/hiphop-php/hiphop-php/src/hphp/hphp test-1.php --keep-tempdir=1 --log=3 running hphp... creating temporary directory /tmp/hphp_xXZ8US ... parsing inputs... parsing ./test-1.php... parsing inputs took 0''00" (1 ms) wall time pre-optimizing... pre-optimizing took 0''00" (0 ms) wall time inferring types... inferring types took 0''00" (0 ms) wall time post-optimizing... post-optimizing took 0''00" (0 ms) wall time creating CPP files... creating CPP files took 0''00" (32 ms) wall time compiling and linking CPP files... compiling and linking CPP files took 0''39" (39807 ms) wall time running executable /tmp/hphp_xXZ8US/program --file test-1.php... plop all files saved in /tmp/hphp_xXZ8US ... running hphp took 0''40" (40054 ms) wall time

Y, a continuación, iniciando el servidor:

$ /tmp/hphp_xXZ8US/program -m server -p 8080 Could not mlockall loading static content... loading static content took 0''00" (0 ms) wall time page server started admin server started all servers started


Ahora, intentemos acceder a esas tres URLs; primero, llamando a http://localhost:8080/test-1.php?test=1 Recibo:

  • Nada en el navegador
  • Unhandled error: Invalid operand type was used: not ArrayAccess objects. En la consola desde la que inicié el servidor.

Para http://localhost:8080/test-1.php?test=2 , obtengo:

  • En el navegador: plop
  • En la consola desde la que inicié el navegador: Division by zero

Y, finalmente, para http://localhost:8080/test-1.php?test=3 , obtengo:

  • En el navegador: plop
  • En la consola: nada.

Aquí, también, las indicaciones de errores no son tan buenas como con PHP ... al menos con las opciones predeterminadas ...


A juzgar por la página wiki de opciones de tiempo de ejecución de hiphop, puede especificar un archivo de configuración que contenga algunas opciones.
Aquí está el contenido del config.txt que utilicé:

Log { Level = Verbose NoSilencer = true AlwaysLogUnhandledExceptions = true RuntimeErrorReportingLevel = 6143 Header = false InjectedStackTrace = true NativeStackTrace = true MaxMessagesPerRequest = -1 } ErrorHandling { CallUserHandlerOnFatals = true NoInfiniteLoopDetection = false NoInfiniteRecursionDetection = false MaxStackDepth = 1000 ThrowBadTypeExceptions = true ThrowNotices = true NoticeFrequency = 1 # 1 out of these many notices to log WarningFrequency = 1 # 1 out of these many warnings to log AssertActive = false AssertWarning = false }


--config el servidor, usando el interruptor --config para apuntar a ese archivo:

$ /tmp/hphp_xXZ8US/program -m server -p 8080 --config=config.txt Could not mlockall loading static content... loading static content took 0''00" (0 ms) wall time page server started admin server started all servers started

Debería obtener más información ... probemos nuevamente nuestras tres solicitudes.


Primero, llamando a http://localhost:8080/test-1.php?test=1 , obtengo:

  • Igual que antes

Para http://localhost:8080/test-1.php?test=2 , obtengo:

  • Igual que antes

Y, finalmente, para http://localhost:8080/test-1.php?test=3 , obtengo:

  • En el navegador: plop
  • En la consola: un nuevo mensaje de error que no recibí antes: f_file_put_contents/316: Permission denied


No probé mucho más, pero jugar con ese archivo de configuración y el interruptor --config parece una idea interesante ;-)


Nota: Hice esas pruebas en Ubuntu 9.10 64bits, que es un sistema con soporte oficial; La instalación fue bastante fácil.

Lo que significa que puede probarlos, haciendo una instalación en una máquina virtual, por ejemplo: siempre que sepa un poco sobre Linux y el software de compilación, la instalación de hiphop no es una tarea imposible.