2009-12-26 14 views
8

Tengo un script PHP que sigue parando en el mismo lugar cada vez y mis informes navegador:Reinicio inesperado de la conexión: ¿un problema de PHP o Apache?

La conexión con el servidor se restableció mientras que la página se cargaba.

He probado esto en Firefox y en IE, sucede lo mismo. Entonces, supongo que esto es un problema de configuración de Apache/PHP. Aquí hay algunas cosas que he establecido.

PHP.ini

max_execution_time = 300000 
max_input_time = 300000 
memory_limit = 256M 

Apache (httpd.conf)

Timeout 300000 
KeepAlive On 
MaxKeepAliveRequests 100 
KeepAliveTimeout 0 

Son lo anterior correcto? ¿Qué puede estar causando esto y qué puedo establecer?

estoy corriendo PHP (5.2.12.12) como un módulo en Apache (2.2) en un Windows servidor 2003.

Es muy probable que este es un tema Apache o PHP como todos los navegadores hacen lo mismo. Creo que el script se ejecuta para exactamente 10 minutos (600 segundos).

+0

¿Qué está haciendo la secuencia de comandos cuando se detiene? – cletus

+1

Creo que en el punto en que se detiene, está ejecutando un script SQL usando la utilidad SQLCMD. Este script tiene alrededor de 500 líneas y eso es todo lo que hace. Cada línea es una llamada para ejecutar un script SQL usando SQLCMD y me pregunto por qué falla allí, ya que ha hecho esto unas 300 veces. ¡Nada en los registros por cierto también! :( – Abs

+0

"¡Nada en los registros por cierto!" - eso incluye los registros del servidor web, php y sqlserver? – VolkerK

Respuesta

0

que iba a tratar de configurar todos los opciones de informes de error

-b en lotes de error abortar
-V severitylevel
error_level -m

y el envío de toda la salida al cliente

<?php 
echo "<div>starting sql batch</div>\n<pre>"; flush(); 
passthru('sqlcmd -b -m -1 -V 11 -l 3 -E -S TYHSY-01 -d newtest201 -i "E:\PHP_N\M_Create_Log_SP.sql"'); 
echo '</pre>done.'; flush(); 
+0

Gracias por todo lo anterior, pero creo que dejaré lo anterior como último recurso porque esos cambios me tomarán algo de tiempo. Acabo de confirmar que este no es un problema de PHP, ya que la última línea del script PHP es solo un aviso. ¿El único pensamiento que queda es Apache? – Abs

+0

Y servidor SQL (pero no creo que esto pueda restablecer una conexión, ¿verdad?). – Abs

+0

¿Realmente es tan difícil ejecutar este script de prueba? ¿O al menos para copiar el guión existente, reemplazar exec() por passthru() y agregar dos líneas de eco? Es solo una prueba. – VolkerK

1

Las diferencias entre 2 configuraciones de PHP fueron de hecho la causa raíz del problema en mi extremo. Mi aplicación se basa en la biblioteca NuSOAP.

En la configuración 1 con PHP 5.2, funcionaba bien ya que la extensión SOAP de PHP estaba desactivada.

En la configuración 2 con PHP 5.3, estaba dando errores de "Restablecimiento de conexión" ya que la extensión SOAP de PHP estaba activada.

Apagar la extensión permite que mi aplicación se ejecute en PHP 5.3 sin tener que reescribir todo.

3

Tuve un problema similar - resulta que apache2 fue segfaulting. La causa del segfault era php5-xdebug para 5.3.2-1ubuntu4.14 en Ubuntu 10.04 LTS. La eliminación de xdebug solucionó el problema.

+0

No tengo php5-xdebug instalado, pero tuve el mismo problema de falta de segmentación de apach2 (11). Puede ser la causa es diferente y no solo php5-debug. –

+0

funcionó para mí, ¡muchas gracias! – slaver113

0

Mi PHP fue segfaulting sin ninguna información adicional en cuanto a la causa de ello también. Resultó ser dos clases llamando al método magic___call(), ya que ninguno de los dos tenía el método llamado. PHP solo hace bucles hasta que se queda sin memoria. Pero no informó el mensaje habitual "Tamaño de memoria permitido de * bytes agotados", probablemente porque los métodos son "mágicos".

2

También tuve este problema hoy, resultó ser una declaración break; perdida en el código PHP (fuera de cualquier interruptor o cualquier bucle), en una función con un bloque try...catch...finally.

Parece que PHP se estrella en esta situación:

<?php 

function a() 
{ 
    break; 

    try 
    { 
    } 
    catch (Exception $e) 
    { 
    } 
    finally 
    { 
    } 
} 

Esto fue con PHP versión 5.5.5.

+0

Tenía exactamente el mismo problema, pero causado por otro tipo de código "extraño" como 'if ($ a []) $ b = $ c;'. Una vez eliminado, todo funcionó de forma normal. Parece que el analizador de PHP a veces no se está recuperando de un código erróneo. – karpy47

1

Tuve un problema donde en ciertos casos PHP 5.4 + eAccelerator = reinicio de la conexión. No hubo resultados de error en ningún archivo de registro, y solo ocurrió en ciertas URL, lo que dificultó el diagnóstico. Resulta que solo sucedió con ciertos códigos PHP/ciertos archivos PHP, y se debió a algunas incompatibilidades con código PHP específico y eAccelerator. La solución más fácil era desactivar eAccelerator para ese sitio específico, mediante la adición de lo siguiente a .htaccess archivo

php_flag eaccelerator.enable 0

php_flag eaccelerator.optimizer 0

(o líneas equivalentes en php.ini) :

eaccelerator.enable = "0"

eaccelerator.optimizer = "0"

1

Es una vieja publicación, lo sé, pero como no pude encontrar la solución a mi problema en ningún lado y lo arreglé, compartiré mi experiencia. La causa principal de mi problema fue una llamada a la función file_exists().
El archivo realmente existía, pero por alguna razón una barra inclinada adicional en la ubicación del archivo ("//") que normalmente funciona en un navegador normal, parece no funcionar en PHP. Tal vez tu problema esté relacionado con algo similar. ¡Espero que esto ayude a alguien!

Cuestiones relacionadas