mod_perl2 a $| = 1

Jan Kasprzak kas na fi.muni.cz
Středa Únor 8 16:00:20 MET 2006


	Zdravim,

objevil jsem _fakt_ divny problem pri migraci na mod_perl2:
Za jistych okolnosti webova aplikace vypise vystup, ale pripoji za neho
chybove hlaseni (jakobych uvedl die(), ale predtim stihl neco vypsat
na vystup). V logu jsou rhlasky typu

[Tue Feb 07 18:13:36 2006] [error] [client 147.251.48.204] malformed header from script. Bad header=\x06\x07\x07\x07\b\b\b\t\t\t: exit.pl

(ta "bad header" je pro kazdy skript jina), nebo tam neni vubec nic.

	Zjistil jsem, ze jde o aplikace, ktere posilaji ven plain text
k ulozeni do souboru, cili delaji neco jako

$|=1; 
print "Content-Type: application/x-text\n";
print "Content-Length: ", length($data), "\n\n";
print $data;
ModPerl::Util::exit();

	Dost podivne je, ze klientovi se (korektne) nabidne dokument
k ulozeni, protoze ma nezobrazitelny MIME typ, ale ten ulozeny dokument
jednak obsahuje na zacatku hlavicku Content-Length, a jednak na konci za daty
chybovou zpravu od Apache, ze internal server error.

	Postupnymi experimenty jsem zjistil, ze kdyz odstranim $|=1,
tak program funguje normalne. Nicmene to $|=1 je tam jeste z nejakych dalsich
duvodu a nejde ho jen tak smazat.

	Skripty jsou spousteny pod ModPerll:Registry. A jeste - kdyz si
vyse uvedeny minimalni problem dam do samostatneho souboru, tak to funguje.
Cili problem je jeste mozna trochu jinde. Ale dal uz se ty aplikace
fakt lisi jedna od druhe - spolecne je pokud vim jen to nastaveni $| = 1.

	Muzu samozrejme vsechny takove aplikace projit, zrusit $| = 1,
a na strategickych mistech volat flush nebo co, ale radeji bych znal
pricinu, proc tohle vznika.

	Diky za jakykoli hint.

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/    Journal: http://www.fi.muni.cz/~kas/blog/ |
> Specs are a basis for _talking_about_ things. But they are _not_ a basis <
> for implementing software.                              --Linus Torvalds <


Další informace o konferenci Perl