destino reflejado
Entonces tengo un script php que ejecuto usando el siguiente comando:
php -f my_script.php myArguments
El script está bajo control de versiones usando svn. Acabo de actualizarlo, pegué el comando para ejecutarlo en una terminal y lo ejecuté. Sin embargo, no hay salida. No es un mensaje de falla, no imprime nada, nada. Parece que nunca arranca. Algo así como lo siguiente:
me:/srv/scripts# php -f my_script.php myArguments
me:/srv/scripts#
Otros scripts funcionarán bien.
Es difícil para mí encontrar un SSCCE, ya que realmente no puedo compartir el código que está causando esto, y no he podido replicar este comportamiento intencionalmente. Sin embargo, he visto esto dos veces ahora. Si guardo mis cambios, revierto el archivo y los vuelvo a pegar, existe una gran posibilidad de que funcione bien.
Sin embargo, me preocupa no saber qué está causando este comportamiento extraño. ¿Hay un carácter de espacio en blanco o algo que le dice a PHP que no se inicie o no genere nada?
Esto es lo que he intentado después de ver este comportamiento:
-
Modificando el script para que sea simple
echo 'hello'
-
Poner tonterías al comienzo del script, por lo que no se puede analizar.
-
Pegar código desde un script de trabajo
-
Golpeando mi cabeza contra una pared por frustración
-
Probándolo en otra terminal/conexión ssh de masilla.
Aquí es donde se pone interesante: en realidad obras en una terminal diferente. Hace todo como se esperaba.
Entonces, ¿alguien tiene alguna idea de qué podría estar causando esto, o cosas que debería probar para determinar el problema?
EDITAR:
La “terminal diferente” sigue siendo la aplicación de terminal, solo una nueva.
Tengo suficientes permisos para ejecutar el archivo, pero incluso si no los tuviera, debería mostrar un mensaje que dice que no.
Intencionalmente introduje errores de sintaxis con la esperanza de que PHP arrojara un error de análisis. Todavía no había salida.
mostrar_errores podría estar deshabilitado antes del tiempo de ejecución. Puede encenderlo manualmente con el -d cambiar:
php -d display_errors=1 -f my_script.php myArguments
-
Esto me ayudó mucho. Tenía un viejo php.ini con
allow_call_time_pass_reference
ajustado aOn
, pero como ya no está disponible, todos los scripts ejecutados por cli fallaron sin salida. Usando-d display_errors=1
lanzar:PHP Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0
, ayudándome a corregir el error eliminando esa línea de php.ini. Gracias Señor– Lorenzo Marcon
17 de enero de 2016 a las 12:42
-
También puede necesitar
-d error_reporting=E_ALL
.– mwfearnley
hace 2 días
Encontré el mismo problema, y ninguna cantidad de obligar a PHP a display_errors
o comprobando la sintaxis con -l
ayudó
Finalmente resolví nuestro problema, y tal vez puedas encontrar alguna ayuda con esta solución.
Pruebe su script sin usar su php.ini:
php -n test_script.php
Esto lo ayudará a afinar la causa real: la configuración de PHP, el script de otra persona o su script.
En mi caso, fue un problema con el script de otra persona que se estaba agregando a través del auto_prepend_file
directiva en el php.ini. (O más específicamente, varios archivos y funciones más tarde, mientras exploraba todo el código agregando depuración a medida que avanzaba; en una nota al margen, puede encontrar que usar fwrite(STDOUT, "debug text\n");
invaluable cuando se trata de depurar este tipo de problema)
Alguien había agregado una función que se estaba ejecutando a través del archivo antepuesto, pero había usado el @
símbolo para suprimir errores en una llamada de función particular. (Es posible que tenga un problema similar pero no relacionado específicamente con php.ini si tiene alguna inclusión en su script de prueba que trae otro código)
La función estaba fallando y causó la muerte silenciosa de PHP, nada que ver con mi script de prueba
Encontrará todo tipo de advertencias sobre cómo utilizar el @
el símbolo causa exactamente el problema que yo tuve, y tal vez usted esté teniendo, http://php.net/manual/en/language.operators.errorcontrol.php.
Reproducción de síntomas similares:
Tome un entorno PHP completamente funcional y rompa su salida CLI agregando esto en la parte superior de su secuencia de comandos
@xxx_not_a_real_function_name_xxx();
Por lo tanto, es posible que tenga un problema con php.ini, o que usted (u otra persona) haya utilizado @
no darse cuenta de las consecuencias graves (y frustrantes y que consumen mucho tiempo) que causa en la depuración
-
Ni siquiera puedo empezar a describir lo útil que fue esto. He trabajado con PHP durante 18 años, y no sabía nada sobre php -n y eso me indicó la dirección correcta. Para mí, estaba en un archivo antepuesto que estaba usando a propósito, pero tenemos un control allí para verificar SSL y, si no, reenviar a SSL. Eso funcionó bien en PHP7, pero en PHP8 parece intentar redirigir la CLI. Sin embargo, es extraño que no haya habido ningún error. Muchas gracias.
–Andy Borgman
18 de abril de 2022 a las 22:19
-
creo que en muchos casos
-n
solo funciona porque php.ini limita la cantidad de errores que se muestran. Así que una mejor manera es hacer-d error_reporting=E_ALL
. Tenga en cuenta que hay una lista completa de tipos de error en php.net/manual/en/errorfunc.constants.php. Mi error particular fue recogido porE_COMPILE_ERROR
.– mwfearnley
hace 2 días
Experimenté que PHP CLI fallaba silenciosamente en un buen script debido a un problema de límite de memoria. Prueba con:
php -d memory_limit=512M script.php
datos_tonto
Recientemente tuve este problema y fue porque no envolví mi archivo de prueba en <?php
& ?>
etiquetas
Banging my head on a wall in frustration
¿Tiene suficiente acceso SSH para poder ejecutar el comando php?– decodificador iam
15 de agosto de 2014 a las 16:49
¿El archivo tiene errores de sintaxis y simplemente termina? – prueba emitiendo
php -l < my_script.php
– MrTux
15/08/2014 a las 16:51
¿Problema con los permisos? puedes hacer un
chmod +x
en el archivo por si acaso– DaGhostman Dimitrov
15 de agosto de 2014 a las 16:54
Cuando dices que funciona en un terminal diferente ¿Te refieres a una aplicación de terminal diferente o en otra instancia de la misma terminal?
– Josué Shearer
15 de agosto de 2014 a las 16:57
php -d display_errors=1 -f my_script.php misArgumentos
– Mike B.
15 de agosto de 2014 a las 17:44