Autor | Zpráva | ||
---|---|---|---|
Pavel Straka Profil |
#1 · Zasláno: 29. 2. 2012, 23:54:00
Dobrý večer, rád bych se zeptal, jestli někdo nemá zkušenosti s chybou, která je v Google Chrome interpretována jako Error 324 (net::ERR_EMPTY_RESPONSE), v ostatních prohlížečích zobrazením bílé stránky, a dokázal by mi případně poradit v obecné rovině, bez bližších informací.
V mém případě se tak tu a tam (bez zjevné příčiny - výpis chybových hlášení zapnutý) děje v PHP souboru, který ukládá uživatelem zadaná data do databáze, po obnovení stránky je vše v pořádku. Předem děkuji za pomoc. |
||
Davex Profil |
#2 · Zasláno: 1. 3. 2012, 18:56:54
Skript se asi ukončí před odesláním dat prohlížeči nebo zhavaruje. Více by mohl napovědět záznam chyb webového serveru (error.log) nebo PHP (konfigurační direktivy
log_errors a error_log ). Nebo si ve funkčních celcích kódu ukládej klasické ladící výpisy do souboru, abys mohl, s pomocí metody půlení intervalu, lépe určit problémové místo.
|
||
Časová prodleva: 8 dní
|
|||
Pavel Straka Profil |
#3 · Zasláno: 9. 3. 2012, 21:23:39 · Upravil/a: Moderátor (editace znemožněna) 13. 3. 2012, 18:47:55
Moderátor Davex: Přesunuto z duplicity Špatně fungující header().
Dobrý večer, rád bych požádal o radu. Na webu uživatelé zadávají data do formuláře a ta se po jeho odeslání uloží do databáze. Uživatel je pak pomocí funkce header přesměrován na stránku, kde je mu oznámeno, že vložení dat proběhlo v pořádku a nějaké další informace. Problém:čas od času se nějakému uživateli zobrazí jen bílá stránka (nebyl přesměrován) a data se neuloží. Výpis chyb je zapnutý, žádná data se před voláním funkce nevypisují. Zajímalo by mě, jestli je nějak možné zjistit příčinu, proč se stránka nepřesměrovala, vypsat nějakou hlášku, která by mi pomohla apod. Mohou s funkcí header obecně nastat podobné problémy? Nebo problém nemusí být ve funkci header? Vycházím z toho, že by se v tomto případě zobrazila nějaká chybová hláška. Děkuji za rady. |
||
Pavel Straka Profil |
#4 · Zasláno: 11. 3. 2012, 11:58:05 · Upravil/a: Pavel Straka
A mohl bys mi prosím poradit, kde najdu ten záznam error.log? Jedná se o hosting forpsi. Jestliže není viditelný přes FTP, je třeba o nějak nějak zvlášť žádat?
Co se týče těch PHP direktiv log_errors a error_log zkoušel jsem přidat do .htaccess kód: php_flag log_errors on php_value error_log cesta k logu ale vrací to chybu 500. Nevíš prosím, kde by mohl být problém? |
||
panther Profil |
#5 · Zasláno: 11. 3. 2012, 18:15:22 · Upravil/a: Moderátor (editace znemožněna) 13. 3. 2012, 18:44:58
Moderátor Davex: Přesunuto z duplicity Špatně fungující header().
Pavel Straka: bez kodu těžko soudit... To, že by header přesměrovával jen někdy, jak se mu zrovna zachce, možné není. Chybu hledej jinde.
|
||
Tori Profil |
#6 · Zasláno: 11. 3. 2012, 20:57:24 · Upravil/a: Moderátor (editace znemožněna) 13. 3. 2012, 18:45:05
Moderátor Davex: Přesunuto z duplicity Špatně fungující header().
Pavel Straka: Nechybí exit; za tím přesměrováním? Ale jen tipuju.
|
||
Pavel Straka Profil |
#7 · Zasláno: 11. 3. 2012, 21:03:29 · Upravil/a: Moderátor (editace znemožněna) 13. 3. 2012, 18:45:15
Moderátor Davex: Přesunuto z duplicity Špatně fungující header().
Upřesním: Jedná se o chybu 324 (net::ERR_EMPTY_RESPONSE). Šlo mi o to, jak nějak vyřešit příčinu a přemýšlel jsem nad nějakou možností, jak v případě, že se zobrazí bílá stránka, zobrazit alespoň nějakou chybovou hlášku, která by mě nasměrovala. To jsem ale později vyhodnotil jako nesmysl, neboť chybové hlášky mám tak jako tak zapnuté. Prozatím jsem si soubor rozdělil na 6 částí a po každé z nich ukládám do souboru text, jako potvrzení, že až sem program proběhl. Zajímal by mě ale nějaký způsob výpisu chybových hlášek do souboru, rada, jak zobrazit soubor error.log (jedná se o hosting forpsi, jestliže není tento soubor viditelný přes FTP, je potřeba o něj žádat?) nebo obecně, jak vyřešit tento problém. Děkuji za ochotu. Tori: exit za přesměrováním mám. |
||
Časová prodleva: 4 dny
|
|||
Pavel Straka Profil |
#8 · Zasláno: 15. 3. 2012, 15:57:30
Včera mi od uživatele přišel takovýto popis chyby: "Po kliknutí na uložení inzerátu se objeví prázdná plocha a nahoře jen jeden řádek,že v záhlaví smí být jen jedna destinace (nevím přesně slovosled)."
Nenapadá někoho, čím by to mohlo být způsobeno? Skript v závislosti na tom jestli jsou vložena všechna data korektně, přesměruje uživatele na jednu stránku, nebo vrátí uživatele na původní. // v pořádku if ($chyba == 0) { Header("Location: adresa 1"); exit; } else Header("Location: adresa 2"); exit; Budu vděčný za každou radu |
||
Davex Profil |
Neběží to náhodou šifrovaně přes SSL? Používají se sessions nebo cookies? Bez ukázky kompletního problematického kódu je každá rada drahá, protože to může být závislé na okolnostech, které neznáme.
Přesměrování odesílej i s nějakým vhodným stavovým kódem třeba takhle: header('Location: http://www.example.com/ulozeno-dobre'); header('Connection: close', false, 303); |
||
Pavel Straka Profil |
#10 · Zasláno: 15. 3. 2012, 19:12:47
Šifrofané přes SSL to není. Sessions se používají pro přihlášení uživatelů, ale myslím, že se ta chyba objevuje i když přihlášen nikdo není. Rozumím, že bez kódu to není snadné určit, ale ten problém se objevuje asi ve 3 různých stránkách naprosto nahodile, myslel jsem, jestli někdo nemá zkušenosti přímo s touto chybou.
|
||
Kcko Profil |
#11 · Zasláno: 15. 3. 2012, 19:29:59
|
||
Pavel Straka Profil |
#12 · Zasláno: 15. 3. 2012, 19:36:11
Kcko: Děkuju, ale to je jen návod pro řešení na straně uživatele v prohlížeči Google Chrome. Ta chyba se ale objevuje i v jiných prohlížečích (jen tam není interpretována jako chyba 324, ale jako bílá stránka).
|
||
Kcko Profil |
#13 · Zasláno: 15. 3. 2012, 19:38:20
Tak googluj, protože já sem se s tím nikdy nesetkal, kód sem nedáš, konfiguraci serveru taky ne, tak Ti asi těžko pomůžeme.
|
||
Davex Profil |
#14 · Zasláno: 15. 3. 2012, 19:42:45
PHP pravděpodobně zhavaruje a prohlížeči neodešle žádná data. Obecně to může být závislé na konkrétní verzi PHP nebo na přítomnosti některého rozšíření jako třeba eAccelerator nebo Suhosin.
|
||
Pavel Straka Profil |
#15 · Zasláno: 15. 3. 2012, 20:00:46
Kcko: Opravdu chápu, že je obtížné takto odpověď. Přikládám tedy kód souboru, který zlobí asi nejčastěji. Ohledně konfigurace serveru vlastně nic nevím, jinak bych to sem také napsal. Jedná se o hosting Forpsi, NORMALhosting. S technickou podporou Forpsi je ale kříž, odeslal jsem jim už několik mailů, jediná odpověď byla tato:
Dobry den, v urcitych verzich distribuce debian a distribuci nad debianem postavenych jsme zaregistrovali obcasne problemy v komunikaci se serverem, pokud byla zapla kontrola timestamps. Vase nastaveni zjistite pomoci "cat /proc/sys/net/ipv4/tcp_timestamps". Pokud vam system vypise jednicku, mate kontrolu zaplou. V tom pripade ji zkuste vypnout prikazem "echo 0 > /proc/sys/net/ipv4/tcp_timestamps". Což nepomohlo, další reakce z jejich strany už není. Davex: Rozumím, o žádném takovém rozšíření ale nevím. Zmiňovaný kód: <?php error_reporting(E_ERROR | E_WARNING | E_PARSE); include "include.php"; $hodnoty = Array( "typ", "podkategorie", "nadpis", "text", "lokalita", "obec", "cena", "mail", "jmeno", "platnost", "telefon", "skype", "icq", "odkaz", "poznamka", "cena_typ", "cena_typ2"); for ($a=0; $a<count($hodnoty); $a++) { if ($a <= 8) { if (strlen(trim($_POST[$hodnoty[$a]])) == 0) $chyba[$a] = 1; if (isset($_SESSION[login]) && strlen(trim($_POST[$hodnoty[$a]])) == 0 && $a == 8) unset($chyba[$a]); if (strlen(trim($_POST[$hodnoty[$a]])) == 0 && $a == 5 && $_POST[lokalita] == "17") unset($chyba[$a]); if (strlen(trim($_POST[$hodnoty[$a]])) == 0 && $a == 6 && ($_POST[cena_typ2] == "dohodou" || $_POST[cena_typ2] == "k jednání" || $_POST[cena_typ2] == "na dotaz" || $_POST[cena_typ2] == "zdarma")) unset($chyba[$a]); } } if (count($chyba) == 0) { for ($a=0;$a<count($hodnoty);$a++) { $sloupce .= "$hodnoty[$a]"; if ($a != (count($hodnoty) - 1)) $sloupce .= ","; $hodnota = $hodnoty[$a]; if ($hodnota == 'jmeno' && isset($_SESSION[login])) $data .= "'".uzivatel($_SESSION[login],jmeno)."'"; elseif ($hodnota == 'cena') $data .= "'".str_replace(" ","",$_POST[cena])."'"; else { $data .= "\"".htmlspecialchars($_POST[$hodnota])."\""; } if ($a != (count($hodnoty) - 1)) $data .= ","; } $nejvyssi = MySQL_Query("SELECT id FROM inzeraty ORDER BY id DESC LIMIT 0,1"); $id = MySQL_Result($nejvyssi,0,"id")+1; if (!empty($_POST[mail])) { $sirka = strlen($_POST[mail]) * 10; $obr = imagecreatetruecolor($sirka, 20); $bila = imagecolorallocate($obr, 255, 255, 255); imagefill($obr, 0, 0, $bila); $cerna = imagecolorallocate($obr,0,0,0); imagestring($obr, 3, 0, 0, "$_POST[mail]", $cerna); imagejpeg($obr,"maily/$id.jpg"); imagedestroy($obr); } for ($a=1;$a<=5;$a++) { if ($_FILES["foto$a"][name] != "") { if ($_FILES["foto$a"][type] == "image/jpeg" || $_FILES["foto$a"][type] == "image/pjpeg" ) { if ($a == 1) @mkdir("fotky/$id",0777); $nahraj = move_uploaded_file($_FILES["foto$a"][tmp_name],"fotky/$id/docasny$a.jpg"); if ($nahraj == 'true') { $docasny = imagecreatefromjpeg("fotky/$id/docasny$a.jpg"); $vodoznak = imagecreatefrompng("obrazky/vodoznak.png"); if (imagesx($docasny) < (imagesx($vodoznak)+20) || imagesy($docasny) < (imagesy($vodoznak)+20)) $chyba_rozmery = 1; } else $chyba_obrazek = 1; } else $chyba_obrazek = 1; } } if ($chyba_rozmery != 1 && $chyba_obrazek != 1) { for ($a=1;$a<=5;$a++) { if ($_FILES["foto$a"][name] != "") { if ($_FILES["foto$a"][type] == "image/jpeg" || $_FILES["foto$a"][type] == "image/pjpeg" ) { $docasny = imagecreatefromjpeg("fotky/$id/docasny$a.jpg"); $vodoznak = imagecreatefrompng("obrazky/vodoznak.png"); if (imagesx($docasny) > SIRKA_FOTKY) { $velky_sirka = SIRKA_FOTKY; $velky_vyska = SIRKA_FOTKY / (imagesx($docasny) / imagesy($docasny)); } else { $velky_sirka = imagesx($docasny); $velky_vyska = imagesy($docasny); } $nazev = Time().Rand(1000,9999).".jpg"; $platno = imagecreatetruecolor($velky_sirka,$velky_vyska); imagecopyresampled($platno,$docasny,0,0,0,0,$velky_sirka,$velky_vyska,imagesx($docasny),imagesy($docasny)); imagejpeg($platno,"fotky/$id/$nazev"); $obrazek = imagecreatefromjpeg("fotky/$id/$nazev"); $pozice_odleva = $velky_sirka - imagesx($vodoznak) - 20; $pozice_shora = $velky_vyska - imagesy($vodoznak) - 20; imagecopymerge($obrazek,$vodoznak,$pozice_odleva,$pozice_shora,0,0,imagesx($vodoznak),imagesy($vodoznak),100); imagejpeg($obrazek,"fotky/$id/$nazev",100); $sirka = 140; $vyska = $sirka / (imagesx($docasny) / imagesy($docasny)); if ($vyska > 100) { $vyska = 100; $sirka = 100 / (imagesy($docasny) / imagesx($docasny)); } $platno = imagecreatetruecolor($sirka,$vyska); imagecopyresampled($platno,$docasny,0,0,0,0,$sirka,$vyska,imagesx($docasny),imagesy($docasny)); imagejpeg($platno,"fotky/$id/_$nazev"); $nejvyssi = MySQL_Query("SELECT id FROM inzeraty ORDER BY id DESC LIMIT 0,1"); $id = MySQL_Result($nejvyssi,0,"id")+1; MySQL_Query("INSERT INTO fotky(inzerat,foto) VALUES('$id','$nazev')"); for ($a=1;$a<=5;$a++) { unlink("fotky/$id/docasny$a.jpg"); } } } } $sloupce .= ",kategorie,dohodou,url,kod,ip,prohlizec"; if (isset($_SESSION[login])) $sloupce .= ",autor"; $kod = kod(20); $data .= ",'$_POST[kate]','$_POST[dohodou]','".url_bez($_POST[nadpis])."-".Time()."','".$kod."','$_SERVER[REMOTE_ADDR]','$_SERVER[HTTP_USER_AGENT]'"; if (isset($_SESSION[login])) $data .= ",'$_SESSION[login]'"; MySQL_Query("INSERT INTO inzeraty($sloupce) VALUES($data)"); $inz = MySQL_Query("SELECT id FROM inzeraty ORDER BY id DESC"); $id = MySQL_Result($inz,0,"id"); $text = "..."; posli_mail(E_MAIL_INZERCE,E_MAIL,"Novy inzerat",$text,1); if (!isset($_SESSION[login])) { $text = "..."; $predmet = StrTr($_POST[nadpis], "ÁÄČÇĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽáäčçďéěëíňóöřšťúůüýž", "AACCDEEEINOORSTUUUYZaaccdeeeinoorstuuuyz"); posli_mail(E_MAIL_INZERCE,"$_POST[mail]","$predmet",$text,1,"",1); } $cena = trim($_POST[cena]); Header("Location:index.php?status=ok&id=$id&cena=$cena"); exit; } } if (count($chyba) != 0 || $chyba_rozmery == 1 || $chyba_obrazek == 1) { $adresa = "podat_inzerat.php?status="; if ($chyba_podminky == 1) $adresa .= "podminky"; elseif ($chyba_rozmery == 1) $adresa .= "rozmery"; elseif ($chyba_obrazek == 1) $adresa .= "obrazek"; elseif (count($chyba) != 0) $adresa .= "nevyplneno"; for ($a=0; $a<count($hodnoty); $a++) { $hodnota = $hodnoty[$a]; $adresa .= "&$hodnoty[$a]=$_POST[$hodnota]"; } $adresa .= "&podminky=$_POST[podminky]&cena_typ=$_POST[cena_typ]&cena_typ2=$_POST[cena_typ2]"; Header("Location:$adresa"); exit; } ?> |
||
Davex Profil |
#16 · Zasláno: 16. 3. 2012, 19:16:55
Žádná zdejší rada nepomohla nebo jsi je nezkoušel?
„Včera mi od uživatele přišel takovýto popis chyby: "Po kliknutí na uložení inzerátu se objeví prázdná plocha a nahoře jen jeden řádek,že v záhlaví smí být jen jedna destinace (nevím přesně slovosled)."“ Bylo by dobré znát přesně znění té chyby. |
||
Pavel Straka Profil |
#17 · Zasláno: 17. 3. 2012, 13:18:38
Davex: Žádná rada nepomohla, samozřejmě jsem je zkoušel. Vím, že by bylo dobré znát přesné znění té chyby, již jsem uživatele požádal o upřesnění, hned, jak budu vědět více, podělím se s Vámi.
|
||
Davex Profil |
#18 · Zasláno: 18. 3. 2012, 12:34:38
Pavel Straka:
„Žádná rada nepomohla“ To znamená, že když jsi zkoušel zaznamenávat ladící informace o průběhu skriptu do logu, tak z něj lze vyčíst, že při výskytu chyby proběhnou všechny části skriptu naprosto bezchybně a pouze se na konci z neznámého důvodu nepřesměruje? |
||
Pavel Straka Profil |
#19 · Zasláno: 18. 3. 2012, 15:27:07
Ano, dá se to tak říct. Pro upřesnění, uživatel zadá jednu z nutných položek špatně / nevyplní, tudíž se část kódu, která zapisuje data do DB přeskočí až k části, která přesměrovává na stránku s výpisem chyby. Skript se tedy provede až potud, problém by tedy měl být někde tady:
if (count($chyba) != 0 || $chyba_rozmery == 1 || $chyba_obrazek == 1) { $adresa = "podat_inzerat.php?status="; if ($chyba_podminky == 1) $adresa .= "podminky"; elseif ($chyba_rozmery == 1) $adresa .= "rozmery"; elseif ($chyba_obrazek == 1) $adresa .= "obrazek"; elseif (count($chyba) != 0) $adresa .= "nevyplneno"; for ($a=0; $a<count($hodnoty); $a++) { $hodnota = $hodnoty[$a]; $adresa .= "&$hodnoty[$a]=$_POST[$hodnota]"; } $adresa .= "&podminky=$_POST[podminky]&cena_typ=$_POST[cena_typ]&cena_typ2=$_POST[cena_typ2]"; Header("Location:$adresa"); exit; } |
||
panther Profil |
#20 · Zasláno: 18. 3. 2012, 15:45:40
Pavel Straka:
nechce se mi studovat celou diskusi, ale pokud myslíš, že je chyba zde, plní se ti správně proměnná adresa? Když dáš na 13. řádek před header die($adresa); , co se ti vypíše? Je tam přesně to, co při dané chybové situaci očekáváš?
Mimoto, v header bys měl předávat absolutní adresu, nikoliv relativní.
|
||
Pavel Straka Profil |
#21 · Zasláno: 18. 3. 2012, 15:53:04
Ano, ta adresa se plní určitě správně. Navíc ta chyba se objevuje ve více souborech, toto je jen jeden, kde je výskyt nejčastější. A chyba se objevuje i s absolutní adresou.
|
||
Davex Profil |
#22 · Zasláno: 18. 3. 2012, 18:34:43
Neprojde-li kontrola vyplněného formuláře na začátku, tak budou na konci neinicializované proměnné
$chyba_podminky , $chyba_rozmery a $chyba_obrazek . Nemůže být chyba v tom, že se o tom vypíše varování?
Také když skládáš novou adresu, tak nijak neošetřuješ vypisované hodnoty a může tedy vzniknout neplatné URL. |
||
Pavel Straka Profil |
#23 · Zasláno: 18. 3. 2012, 18:45:08 · Upravil/a: Pavel Straka
Ale jakékoliv varování by se přece díky tomuto:
error_reporting(E_ERROR | E_WARNING | E_PARSE); A proč by se chyba vyskytovala jen takto nahodile? A jak prosím myslíš to s ošetřováním vypisovaných hodnot? |
||
Davex Profil |
#24 · Zasláno: 18. 3. 2012, 19:00:05
Pavel Straka:
„mělo vypsat nebo ne?“ Tím to vlastně nebude, protože nedefinované proměnné jsou E_NOTICE , takže se o tom chyba nezobrazí.
Když bude v některé položce nějaký vtipný znak - třeba v poznámce nový řádek - tak se složí nová adresa na víc řádků, a to není moc dobře. Chtělo by to všechny hodnoty vkládané do adresy escapovat pomocí urlencode() .
|
||
Pavel Straka Profil |
#25 · Zasláno: 19. 3. 2012, 00:25:49
To máš vlastně pravdu, každopádně to by se ta chyba děla mnohem častěji, protože to, že uživatel nevyplní všechny povinné položky korektně se děje celkem často. Možná by zakopaný pes mohl být v té druhé alternativě, kterou jsi zmínil.
|
||
Časová prodleva: 4 dny
|
|||
Franko Profil * |
#26 · Zasláno: 22. 3. 2012, 13:25:17
Pavel Straka:
Dobry den, zobrazuje se chybove hlaseni na ruzych OS, nebo jen na Linuxu ? |
||
Pavel Straka Profil |
#27 · Zasláno: 23. 3. 2012, 09:57:06
Franko: Nevím, jak přesně to myslíte, hosting běží na Linuxu, co se týče uživatelů, zobrazuje se chyba i jinde než na Linuxu.
Davex: Ještě jsem se nad tím zamýšlel, a došlo mi, že ta možná příčina, o které jsme mluvili, nekoresponduje s faktem, že po obnovení stránky vše funguje normálně, v pořádku. Nenapadá tě ještě něco? Děkuju |
||
Časová prodleva: 12 let
|
0