script index headers end before php cgi

php - index - Error 500: Final prematuro de los encabezados de script



end of script output before headers php (15)

¡Revisa tus finales de línea! Si ve un error acerca de que no se encuentra el archivo, seguido de este error "prematuro de los encabezados finales" en su registro de Apache, es posible que tenga terminaciones de línea de Windows en su secuencia de comandos en lugar del estilo Unix. Me encontré con ese problema / solución.

Aparece el mensaje de error "Final prematuro de los encabezados del script: contactform.cgi" al ejecutar el siguiente script. Lo que me frustra es que ejecuté esto como un .php en otro servidor y funcionó. Sin embargo, tuve que cambiar los servidores y solo son compatibles con CGI PHP. Sin embargo, no funciona. No creo que el código sea incorrecto, pero eche un vistazo por si acaso.

He leído y algunos han dicho que es un problema de permisos. ¿Podría ser este el caso para mí?

Sé que las declaraciones "display_errors" y "error_reporting" mostrarán errores en el registro de errores, pero si no tengo acceso al servidor, ¿cómo puedo verificar los registros?

#!/usr/local/bin/php <?php print "Content-type: text/html/n/n"; use CGI::Carp qw(fatalsToBrowser); ini_set(''display_errors'',1); error_reporting(E_ALL); if(isset($_POST[''email''])) { //Email this form to me $email_to = "[email protected]"; function died($error) { // your error code can go here echo "Oops... something''s wrong. "; echo "Fix the error(s) below:<br /><br />"; echo $error."<br /><br />"; echo "All your base are belong to us...<br /><br />"; die(); } // validation expected data exists if(!isset($_POST[''first_name'']) || !isset($_POST[''last_name'']) || !isset($_POST[''email'']) || !isset($_POST[''subject'']) || !isset($_POST[''comments''])) { died(''There appears to be a problem with the form you submitted.''); } $first_name = $_POST[''first_name'']; // required $last_name = $_POST[''last_name'']; // required $email_from = $_POST[''email'']; // required $subject = $_POST[''subject'']; // not required $comments = $_POST[''comments'']; // required $error_message = ""; $email_exp = ''/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+/.[A-Za-z]{2,4}$/''; if(!preg_match($email_exp,$email_from)) { $error_message .= ''The Email Address you entered does not appear to be valid.<br />''; } $string_exp = "/^[A-Za-z .''-]+$/"; if(!preg_match($string_exp,$first_name)) { $error_message .= ''The First Name you entered does not appear to be valid.<br />''; } if(!preg_match($string_exp,$last_name)) { $error_message .= ''The Last Name you entered does not appear to be valid.<br />''; } if(strlen($comments) < 2) { $error_message .= ''The Comments you entered do not appear to be valid.<br />''; } if(strlen($error_message) > 0) { died($error_message); } $email_message = "Form details below./n/n"; function clean_string($string) { $bad = array("content-type","bcc:","to:","cc:","href"); return str_replace($bad,"",$string); } $email_message .= "First Name: ".clean_string($first_name)."/n"; $email_message .= "Last Name: ".clean_string($last_name)."/n"; $email_message .= "Email: ".clean_string($email_from)."/n"; $email_message .= "Subject: ".clean_string($subject)."/n"; $email_message .= "Comments: ".clean_string($comments)."/n"; //Email Subject (put here to include subject from form) $email_subject = "COR | ".clean_string($subject).""; // create email headers $headers = ''From: ''.$email_from."/r/n". ''Reply-To: ''.$email_from."/r/n" . ''X-Mailer: PHP/'' . phpversion(); @mail($email_to, $email_subject, $email_message, $headers); ?> <!-- include your own success html here --> <?php header("Location: cor/thankyou.html"); } ?>


Después de muchas diferencias, esto era lo que faltaba en el archivo httpd.conf en el servidor en cuestión:

AddHandler php5-script .php

Resuelto el problema.


El error puede ser causado por varios problemas. Para más información verifique los registros de suexec o fcgi. Por ejemplo, si suexec tiene un usuario incorrecto y permssion puede causar que el error ocurra para resolver el intento

chgrp WEBGROUP /usr/local/apache2/bin/suexec chmod 4750 /usr/local/apache2/bin/suexec


El mensaje de error "Final prematuro de los encabezados de script" es probablemente el mensaje de error más odiado y común que encontrará. Lo que realmente significa el error, es que la secuencia de comandos se detuvo por cualquier motivo antes de devolver cualquier salida al servidor web. Una causa común de esto para los guionistas es no poder establecer un tipo de contenido antes de imprimir el código de salida. En Perl, por ejemplo, antes de imprimir cualquier HTML, es necesario decirle al script de Perl que establezca el tipo de contenido en texto / html, esto se hace enviando un encabezado, así:

print "Content-type: text/html/n/n";

(fuente: http://htmlfixit.com/cgi-tutes/tutorial_Common_Web_dev_error_messages_and_what_they_mean.php#premature


En mi caso (haciendo referencia a un archivo PHP en la carpeta superior de un complemento de Wordpress) tuve que cambiar los permisos en esa carpeta. Mi entorno de prueba estaba bien, pero cuando se implementó la carpeta tenía 775. Lo cambié a 755 y funciona bien.


En mi caso tuve que cambiar.

#!/usr/bin/php

a

#!/usr/bin/php-cgi


Experimenté este problema hoy, pero desafortunadamente ninguna de las sugerencias aquí ayudó. El único problema fue que no vi CUALQUIER error ... Literalmente tuve que hacer una strace -p <process_id> en el hilo de Apache para detectar los encabezados que se escriben y Apache se bloquea en la siguiente línea; En algún lugar de mi código PHP estaba configurando un encabezado con más de 12 KB de datos.

La lección aquí es que, en algunos casos, Apache se bloquea con un HTTP error 500 - Premature end of script fracaso puede ser el resultado de tener encabezados HTTP demasiado largos o desbordados.

Depure la longitud de sus encabezados si tiene los mismos problemas porque la mayoría (si no todos) los servidores web tienen límites de encabezado HTTP.

PD: Esta respuesta tiene alguna información sobre el tamaño de los encabezados.



Me topé con este problema usando PHP-FPM y Apache después de aumentar los valores predeterminados de Apache LimitRequestFieldSize y LimitRequestLine.

La única razón por la que hice esto (apache dice no desordenar) es porque Yii2 tiene algunos problemas pjax con las solicitudes POST. Como solución alternativa, decidí aumentar estos límites y utilizar encabezados GET gigantescos.

php-fpm barfed el error 500 sin embargo.


Pensé que respondería a mi propia pregunta para las patadas y las risitas (y para todos aquellos que algún día podrían encontrarse con el mismo error y sin respuestas).

Era un problema de permiso de archivo.

Todos los archivos en mi sitio web fueron configurados con un permiso de ''644.'' Una vez que cambié el nivel de permiso a 705 ( chmod 705 [ chmod 755 también funcionará]) todo estaba bien y era excelente. No es que esto importe, pero también cambié la carpeta en la que estaba a 701 (para ocultarla, pero aún así ser ejecutable por el servidor).

Todavía no entiendo por qué mi archivo .PHP funcionó en el otro servidor cuando probablemente se configuró en 644. ¿Cómo podría Apache ejecutar el script sin permiso mundial? ¿Apache no necesita permiso mundial? Sólo unas pocas preguntas que todavía tengo ...


Tarde en este hilo, pero recibo este error de forma intermitente en una página que se carga muy bien el 99% del tiempo. Además, si hago una actualización del navegador después de recibir el error, la página se carga correctamente. En vista de eso, no creo que se trate de un problema de permisos, pero no tengo idea de qué más buscar y mi proveedor de alojamiento web no es muy útil.


Tengo este problema y lo resuelvo cambiando la versión de PHP de 5.3.3 a 5.6.30.


Tiene que ver con los permisos de archivo y ocurre en los sistemas que tienen instalado el suphp (generalmente servidores cpanel / whost).

Eliminar el permiso de escritura de cualquier otra persona que no sea el propietario (644 | 600) para los archivos php solucionará el problema. Así es como lo arreglé.

Espero que esto ayude.


para solucionar este problema, tuve que cambiar los permisos de todo el directorio a 755 (777 no me funcionó) y cambiar los propietarios de los archivos de todo el directorio

chmod -R 755 public_html chown -R nobody:nobody public_html

nadie es usuario que ejecuta php en mi computadora.


u olvidó agregar el encabezado de tipo de contenido adecuado en la respuesta, que debe tener un encabezado http cuando se hospeda en apache2

utilizar

print "Content-type:text/html/r/n/r/n"

o

header(''Content-Type: text/html'');