Domanda

Sono tra cui uno script PHP che cambia l'URL.

// index.php
ob_start();
include "script.php";
   // This script redirects using  header("Location:");
$out = ob_get_clean();
// I use the $out data for calculations
echo $out;

C'è un modo semplice per contrastare o annullare questo redirect indesiderati? Che ne dite di:

header("Location: index.php");   // redirect back to self

Ma questo causa un loop di reindirizzamento senza fine ... qualche idea?

O c'è un modo per togliere l'intestazione () chiama dal buffer $ out, evitando che mai raggiungere il cliente?

È stato utile?

Soluzione

Solo per riferimenti futuri. Dal PHP 5.3 c'è una nuova funzione chiamata header_remove () che aiuta trattare con queste situazioni.

Altri suggerimenti

Si potrebbe provare a sovrascrivere il campo di intestazione con un valore non valido, come ad esempio:

header('Location: ', true);

Ma io non so come i clienti reagiscono su questo.

In realtà non è un buon modo per farlo. Due cose mi vengono in mente:

  1. Apri script.php come file di testo, striscia fuori qualsiasi intestazione () comandi e quindi eval () il risultato.
  2. Echo uno spazio prima di includere script.php e poi intrappolare l'avvertimento che PHP genera circa l'emissione di un colpo di testa () dopo che l'uscita è già iniziato. Avresti bisogno per riprendere lo spazio prima del buffer di uscita.

Che dire incluso il file prima come una variabile con file_get_contents(), escludendo le intestazioni indesiderati e poi eseguendolo con codice PHP (non voglio menzionare la parola male utilizzato per analizzare una stringa PHP come codice PHP)?

Se non si dispone di PHP5.3 a vostra disposizione (probabilmente non lo fanno), di Gumbo risposta non funziona e non si desidera utilizzare eval, quindi l'unica altra opzione che posso vedere, è l'uso di flussi . Questa è però ancora un altro, più flessibile ma complessa, forma di eval. Streams, combinate con tokenizer , e sarete in grado di ottenere liberarsi di quella chiamata di funzione con un semplice:

require 'no-header://script.php';

Dal momento che hai il testo completo in una stringa prima di output, è possibile rimuovere le intestazioni semplice che desiderate con una ricerca e sostituzione (usando una regex per esempio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top