Jump to content
php.lv forumi

PHP procesa izpildes mistika


Kavacky

Recommended Posts

Ir kods:

			foreach ( $cool_array as $elem_value )
		{
			echo 'aaa';
			echo $elem_value;
			echo 'bbb';
		}

Uzskatāmības pēc viss sadalīts 3 rindiņās, darbojas arī tad, ja saraksta ar vienu echo, atdalot visu ar komatu vai arī konkatenējot.

 

Ja rakstīts tā, kā tur tagad rakstīts - PHP visu jauki izpilda, taču ilgi nenobeidz procesu - kaut arī viss izvads jau sen ir browserī, PHP process ir dzīvs, konekcija ir vaļā un browseris pat nesāk attēlot saņemto, kaut arī View Source jau visu var apskatīt, kā arī uzrādās, ka kods no a līdz z izpildīts normālajās pārdesmit milisekundēs ( nu tur būtībā nav tikai šis kods, bet tas pārējais it kā neiespaido neko ).

 

Aizkomentējam jebkuru no 3 echo rindiņām - un tavu brīnumu - nekas vairs neieķeras, process izpildās un momentā arī pats atmirst un viss ir bumbās. Taču tiklīdz izpildam visas 3 rindiņas, kaut kas viņam vairs nepatīk.

 

Var likt vēl citus echo pirms un pēc tā foreach bloka ar dajebkādu saturu, tas nekādu iespaidu uz to dīvaino uzvedību arī neatstāj. Būtībā var likt arī citus foreach blokus dajebkur citur ar dažādiem citiem masīviem, nekas nenotiek. Tikai pie tā foršā masīva, kurš saturiski arī ne ar ko tādu no citiem neatšķiras ( masīvs kā masīvs, visas vērtības string tipa ) , sākas tā dīvanība.

 

PHP versija 5.2.4. Uz citiem datoriem ar absolūti identisku servera un PHP konfigurāciju nekas neaizķeras. Pamainu versiju ( uz 5.2.6 provēju ) - tas pats.

 

Īsumā - WTF, idejas ko PHP tur nevar sagremot, jebšu viņš tikai ienīst manu datoru?

Edited by Kavacky
Link to comment
Share on other sites

Konstatējums #1: PHP pats neiebilst pret to izvadu, kā to apliecina komandrinda un telnets.

 

Konstatējums #2: Arī iebremzējošie browseri neiebilst pret izvadu ķipa 'aaa', $var, 'bbb', bet gan izvadu '<link rel.. ļaļaļa bwah.css>'.

 

Un tā kā šajā "projekta" stadijā tādu failu, kādu pieprasījumi HTMLā tika drukāti, nebija, viņus atrast nevarēja. Arī Apache mod_rewrite ar -f nosacījumu neko neatrada, tāpēc pasvieda uz galveno lapu un failu vietā browseris dabūja galīgi ne to, ko gaidīja, pat ne servera atbildi 404 ( 404 headeri gan šajā gadījumā iedod pati galvenā lapa, jo saņem galīgi kreisos parametrus ).

 

Problēma faktiski solved, tā noreducējas līdz tam, ka mans PHP iebilst pret die() operatīvu izpildi un velkas uz to, kas tika novērots jau agrāk ( iekavējas kaut kas arī caur komandrindu ), pie tam arī tikai uz šīs kastes. Bet tā kā šeit die() nav paredzēts regulārs pielietojums, tad testēšanas vajadzībām netraucē.

 

Danke, kungi. ;)

Link to comment
Share on other sites

×
×
  • Create New...