cipcaps Posted February 19, 2010 Report Share Posted February 19, 2010 Man ir sekojošs kods : function redirect($p,$red=true){ if($red==true){ @$red = header("HTTP/1.1 301 Moved Permanently"); @$redirect = header('Location: '.$p); } else { $red = false; $redirect = false; } if(!$redirect||!$red){ echo '<script> window.location.href="'.$p.'"; </script>'; } die(); } Kad pieprasu lapu izpildās šāds kods : @include($global['modFold'].$file); if(!defined('moduleLoaded')){ $mk->error('11'); } Error funkcija : function error($code,$red=true){ global $global,$error; $location = $global['siteUrl'].str_replace('%C%',$code,$error['errorPage']); $errInfo = urldecode((isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'')).'|'.urlencode((isset($_SERVER['PHP_SELF'])?$_SERVER['PHP_SELF']:'')); setcookie('mkError',$errInfo,time()+10000,'/',$global['server']); $this->redirect($location,$red); die(); } Bet tad ja "if(!defined('moduleLoaded'))" izpildās, t.i. ielādējas modulis un šī vērtība ir, viņš vienalga to erroru pieprasa, bet nepārmet lapu, tikai backgroundā pieprasa, un ja header aizvāc tad tā nav, vai arī ja $red definē kā false Quote Link to comment Share on other sites More sharing options...
waplet Posted February 19, 2010 Report Share Posted February 19, 2010 ja tu redirektē uz failu, tad ja nemaldos, vajadzētu visādas opcijas norādīt. Quote Link to comment Share on other sites More sharing options...
briedis Posted February 19, 2010 Report Share Posted February 19, 2010 Kam tev tur tās @ zīmes? Quote Link to comment Share on other sites More sharing options...
cipcaps Posted February 19, 2010 Author Report Share Posted February 19, 2010 Kam tev tur tās @ zīmes? @ ir lai kļūdas rezultātā nerādās php errori, bet vienkārši false Quote Link to comment Share on other sites More sharing options...
2easy Posted February 19, 2010 Report Share Posted February 19, 2010 lol, šis ir pats dīvainākais redirect, kāds jebkad ir redzēts!!! manuāļa definīcija void header ( string string [, bool replace [, int http_response_code]] ) void nozīmē, ka šī funkcija neizdod vērtību. tāpēc wtf??? @$redirect = header('Location: '.$p); un ja jau redirectā ir die(), tad priekš kam vēlreiz raksti die() iekš error()? kā jau briedis teica, noņem nost @, lai redzētu error message kr4 pārraksti to kodu vnkāršāk bez visādiem brīnumiem Quote Link to comment Share on other sites More sharing options...
cipcaps Posted February 19, 2010 Author Report Share Posted February 19, 2010 Tikai ir tā ka ja nav defināts tas moduleLoaded tad viņš arī pārmet uz lapu. Quote Link to comment Share on other sites More sharing options...
cipcaps Posted February 19, 2010 Author Report Share Posted February 19, 2010 $redirect = header(...) ir lai pēc tam varētu lietot if($redirect) lai redzētu vai izdodas... Quote Link to comment Share on other sites More sharing options...
briedis Posted February 19, 2010 Report Share Posted February 19, 2010 $redirect = header(...) ir lai pēc tam varētu lietot if($redirect) lai redzētu vai izdodas... nu bet funkcija header neatgriež nekādu vērtību :D Tas kods tiešām ir kaut kāds nesaprotams... Quote Link to comment Share on other sites More sharing options...
cipcaps Posted February 19, 2010 Author Report Share Posted February 19, 2010 (edited) function redirect($p){ header("HTTP/1.1 301 Moved Permanently"); header('Location: '.$p); echo '<script> window.location.href="'.$p.'"; </script>'; } ook, šitāds ir jaunais, nekādas kļūdas neatgriež, bet DB vienalga poustojas, ka ir errors atgriezts, t.i. noticis redirekts uz error lapu. Edited February 19, 2010 by cipcaps Quote Link to comment Share on other sites More sharing options...
2easy Posted February 19, 2010 Report Share Posted February 19, 2010 (edited) normāls redirect manā izpratnē būtu šāds function redirect($p){ header("HTTP/1.1 301 Moved Permanently"); header('Location: '.$p); exit; } bet error droši vien izdod tāpēc, ka konstante 'moduleLoaded' nav definēta noņem visus @ un pārbaudi inklūdojamo failu, vai tas nodefinē šādu konstanti testē/debugo pakāpeniski pa mazam gabalam, kamēr pamani vietu kur pirmīt bija ok, bet vairs nav Edited February 19, 2010 by 2easy Quote Link to comment Share on other sites More sharing options...
briedis Posted February 19, 2010 Report Share Posted February 19, 2010 function redirect($p){ header("HTTP/1.1 301 Moved Permanently"); header('Location: '.$p); echo '<script> window.location.href="'.$p.'"; </script>'; } ook, šitāds ir jaunais, nekādas kļūdas neatgriež, bet DB vienalga poustojas, ka ir errors atgriezts, t.i. noticis redirekts uz error lapu. Ņem arā to echo. Nosūtot location headerī lietotājs tiek uzreiz pāradresēts. Pēc šīs darbības vairs nevajadzētu neko darīt, bet vienkārši uz taisi exit(). Quote Link to comment Share on other sites More sharing options...
2easy Posted February 19, 2010 Report Share Posted February 19, 2010 Ņem arā to echo. Nosūtot location headerī lietotājs tiek uzreiz pāradresēts. Pēc šīs darbības vairs nevajadzētu neko darīt, bet vienkārši uz taisi exit(). :D:D:D tas saucās doublepost, tikai šoreiz 2 dažādu useru izpildījumā Quote Link to comment Share on other sites More sharing options...
cipcaps Posted February 19, 2010 Author Report Share Posted February 19, 2010 header izgāžas, ja ir kautkas jau pirmstam nosūtīts, tāpēc ir echo, lai redirekts notiek arī lapas vidū. Quote Link to comment Share on other sites More sharing options...
briedis Posted February 19, 2010 Report Share Posted February 19, 2010 header izgāžas, ja ir kautkas jau pirmstam nosūtīts, tāpēc ir echo, lai redirekts notiek arī lapas vidū. Nu, a kāpēc ir jāvada kaut kas ārā, ja plāno sūtīt headeri? Un ko darīs lietotājs, ja JS būs izslēgts? Quote Link to comment Share on other sites More sharing options...
2easy Posted February 19, 2010 Report Share Posted February 19, 2010 nu jaa... nesūti neko pirms tam! sākumā pieņem visus lēmumus: rādīt lapu vai redirektot un pēc tam tikai sāc kko outputot Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.