2009-03-07 14 views

Respuesta

6

Resultó que era la línea

ob_start("ob_gzhandler"); 

que causó la advertencia. Esto ha sido reportado y solucionado en 2001, parece, pero por alguna razón sigue volviendo.

+1

¡Buen trabajo para encontrar tu solución! Puede elegir su respuesta como la correcta para que se pueda ver en la parte superior de las otras respuestas. También puede editarlo para agregar más detalles para que pueda ayudar a otra persona. – lpfavreau

+0

Hay un límite de 48 horas para aceptar las propias respuestas. En cuanto a los detalles, no puedo pensar en nada más para agregar. –

+0

Bueno, pensé que tal vez en más detalles sobre "informado y reparado en 2001". ¿Por quién? Por la comunidad PHP? ¿Tienes un enlace a un informe de error? ¿O algún error interno por su parte o por parte de su equipo? ¿Dónde se llamaba? Al comienzo de todos tus scripts? En un incluir? En una biblioteca conocida? Podría ayudar. :-) – lpfavreau

2

Creo que lo que está sucediendo es una de las funciones de php creadas está produciendo algo. Lo he visto con un par de funciones de IMAP en las que ponen solo un "" (carácter de espacio) y arruina las cosas. Puede rastrearlo usando Xdebug o el depurador Zend, pero si no tiene trate de envolver el almacenamiento en búfer de salida en torno a algunas de las funciones que cree que pueden causarlo.

ob_start(); 
callYourFunction(); 
ob_end_clean(); 

Haga esto una función a la vez y cuando el error desaparece sabrá qué función es la causa que el problema, entonces usted puede presentar un informe de error o simplemente dejarlo en como un truco. Pero al menos entonces sabes qué función causa el problema.

Editar: El hecho que dice que su salida está ocurriendo en la línea 0 significa que es una función de nivel C que produce la salida, no cualquier código que se haya escrito usando PHP.

1

¿Ha comprobado sus archivos por UTF-8 BOMs no deseados?

+0

Este fue mi problema. Corregido ahora gracias a Notepad ++ "Codificación-> Convertir a UTF-8 sin lista de materiales" función –

3

Puede haber muchas cosas, pero como dijeron los demás, a menudo es solo un espacio en algún lugar que se emite y luego se envía un comando header() que normalmente está bien, pero no después de comenzar a enviar contenido de nuevo (potencialmente solo un espacio en este caso).

El uso de ob_start() evita que la salida se apague de inmediato al almacenarla en búfer. Entonces, es una solución potencial, o al menos una forma de diagnosticar de dónde viene el zodeus said.


Una cosa común que causa que pierdan espacios es en este escenario.

global.php

<?php 
    $variable = 1; 
    $database = 'something else'; 
?> <-- A space here 
<-- Or here 

index.php

<?php 

    require('global.php'); 
    $var = dosomething(); 
    header('Location: http://www.example.com/'); 

?> 

Una forma de arreglar eso es quitar el?> Al final del archivo global.php. No los necesita, solo son útiles si comienza a poner HTML, por ejemplo, después de su código PHP. Por lo que tendría:

<?php 
    $variable = 1; 
    $database = 'something else'; 

Y cuando lo hace el require(), el espacio no se emite antes de la header().


Sólo para ilustrar los problemas con el contenido emitido y cabeceras es que otro caso común que da un error similar. Sucede cuando se olvida de detener el procesamiento después de una redirección usando header().

if ($notLoggedIn) { 
    header('Location: http://www.example.com/login.php'); 
} 
echo 'Welcome to my website'; // this will be outputted, 
           // you should have an exit() 
           // right after the header() 
+0

Como siempre, se agradece un comentario explicando el downvote para que pueda hacer ajustes, aprender o eliminar la pregunta si es incorrecta. Gracias. – lpfavreau

0

El error que indica que algo ha enviado la salida, lo que obligaría a las cabeceras de ser enviados, porque las cabeceras deben escribirse antes de que el cuerpo del mensaje HTTP.

El problema más común que he encontrado es el texto en los encabezados. vis:

<?php // myfile.php 
    include 'header.php'; 
?> 

y en header.php:

<?php // header.php 
    .... 
?> 

Lo que no se puede ver aquí es que hay un espacio en blanco - un espacio o CR/LF después del cierre '?>'. Esto se genera porque el estándar php dice que cualquier cosa que esté fuera de las etiquetas php sale como html.

La solución es asegurarse de que se asegure de borrar todo después del cierre '?>'

+0

hay un PHP _standard_ ??!?! – Alnitak

Cuestiones relacionadas