2011-10-12 10 views
6

Sto imparando PHP e ho cercato questo per un po '. Quello che voglio ottenere è qualcosa in questo modo:Come posso inviare un utente a un altro URL senza un reindirizzamento dell'intestazione?

if (true/false) { 
    go to this url; 
} 

Ogni volta che cerco termini come PHP reindirizza o link php ecc, il 99% del tempo ho qualcosa "headers". Ho letto che i reindirizzamenti dell'intestazione possono raggiungere questo obiettivo, ma nessun codice può andare prima di esso, che deve essere il primo nella pagina altrimenti non funzionerà.

Se è così, allora come posso ottenere questo?

+4

Non è possibile avere alcun output prima di eseguire un reindirizzamento di intestazione, ma di solito sono la strada da percorrere. Pensare a come è possibile eseguire il controllo vero/falso prima che venga emesso qualsiasi HTML è di solito un'idea migliore del tentativo di trovare un modo per reindirizzare a una pagina nel mezzo del rendering –

+1

Se hai già emesso qualcosa, puoi usare entrambi JavaScript 'document.location =" url ";' o il tag di meta aggiornamento deprecato: https://secure.wikimedia.org/wikipedia/en/wiki/Meta_refresh – Tom

+0

grazie. mal prendere il tuo consiglio pekka e metterlo in b4 qualsiasi rendering ... im controllare determinati valori da un modulo rispetto ad alcuni valori su un db così che sia la strada da percorrere. Grazie. – somdow

risposta

8

Ho letto che i reindirizzamenti dell'intestazione possono raggiungere questo obiettivo ma nessun codice può andare prima di esso. che deve essere prima sulla pagina altrimenti non funzionerà.

Questo è sbagliato. Non ci deve essere uscita prima di questo. Quindi devi assicurarti che non hai echo, print, ?>something<?php (o qualsiasi altra cosa) prima.

if (true) { 
    header('Location: ' . $url, false, 302); 
    exit; // Ensures, that there is no code _after_ the redirect executed 
} 

È possibile tutto pronto about it in the official manual. In particolare:

Ricordare che l'intestazione() deve essere chiamata prima che venga inviato qualsiasi output effettivo, tramite normali tag HTML, righe vuote in un file o da PHP. È un errore molto comune leggere il codice con include(), o require(), funzioni o un'altra funzione di accesso ai file, e avere spazi o righe vuote che vengono emesse prima che venga chiamato header(). Lo stesso problema esiste quando si utilizza un singolo file PHP/HTML.

+2

E anche se pensi di poterlo fare, puoi usare [buffer output] (http://php.net/manual/en/book.outcontrol.php) se sei preoccupato. –

+0

ahh ok ok capisco. ho frainteso la parte "uscita" lmao. grazie per quello !. e grazie anche a te Brad. – somdow

5
echo '<script type="text/javascript"> document.location = "http://yoururl.com";</script>' 

e questo sarà eseguito quando viene eseguita questa parte del copione.

+0

Ho eseguito il upvoting perché hai dato una risposta che non era intestazione (come menziona nella domanda) ma non lo so avrei dovuto perché sento che aveva davvero bisogno di qualcuno per spiegare il buffer di output: P – Gazillion

0

È possibile utilizzare questo se avete bisogno di qualche uscita prima che il reindirizzamento:

header("refresh: $time_in_seconds; url=$your_url); 

È ancora necessario chiamare questa prima uscita è in realtà inviato comunque. Invia l'intestazione, quindi invia l'output: la pagina "reindirizzerà" nel tempo specificato.

Declinazione di responsabilità: Devo ammettere che non sono sicuro di quali siano le implicazioni e non riesca a trovare documenti su di esso, quindi non posso necessariamente raccomandarlo, ma posso verificare che funzioni.

Problemi correlati