Pregunta

Estoy incluyendo un script PHP que cambia la 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;

¿Hay una manera simple de contrarrestar o deshacer la redirección no deseado? ¿Qué hay de:

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

Sin embargo, esto provoca un redireccionamiento bucle sin fin ... alguna idea?

O hay una manera de quitar el encabezado () llama desde el buffer $ cabo, evitando que llegar nunca al cliente?

¿Fue útil?

Solución

Sólo para futuras referencias. A partir de PHP 5.3 hay una nueva función llamada header_remove () lo que ayuda a hacer frente a tales situaciones.

Otros consejos

Se podría tratar de sustituir dicho campo de la cabecera con un valor no válido, por ejemplo:

header('Location: ', true);

Pero no sé cómo reaccionan los clientes en eso.

No hay realmente una buena manera de hacer eso. Dos cosas vienen a la mente:

  1. script.php abierto como un archivo de texto, tira a cualquier cabecera () comandos y luego eval () el resultado.
  2. echo un espacio antes de incluir script.php y luego trampa de la advertencia de que PHP genera sobre la emisión de una cabecera () después ya ha comenzado la salida. Que había necesidad de hacerse eco del espacio antes de su almacenamiento en búfer de salida.

¿Qué hay de incluir el archivo por primera vez como una variable con file_get_contents(), excluyendo las cabeceras no deseados y luego ejecutarlo con código PHP (no voy a mencionar la palabra mal utilizada para analizar una cadena como código PHP PHP)?

Si usted no tiene PHP5.3 a su disposición (es probable que no lo hace), Gumbo de respuesta no funciona y que no quieren usar eval, entonces la única opción que puedo ver, es el uso de corrientes . Esto es sin embargo aún otro, más flexible, pero compleja, forma de eval. Arroyos, combinados con tokenizer , y usted será capaz de obtener deshacerse de esa llamada a la función con un simple:

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

Ya que tienes el texto completo en una cadena antes de la salida, puede sencillo eliminar los encabezados que desea con una búsqueda y reemplazo (usando una expresión regular, por ejemplo).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top