Nasıl bir yer PHP script Yer URL değiştirmesini engellemek mi?

6 Cevap php

Ben URL değiştiren bir PHP komut dosyası dahil.

// 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;

Bu istenmeyen yönlendirme karşı veya geri almak için basit bir yolu var mı? Nasıl hakkında:

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

Ama bu sonsuz bir yönlendirme döngüye neden olur ... herhangi bir fikir?

Ya da hiç müşteri ulaşmasını engelleyen, başlığını $ dışarı tampon () çağrıları dışarı atmak için bir yol var?

6 Cevap

Sadece gelecek referanslar için. PHP 5.3 'header_remove() gibi durumlarda başa yardımcı adında yeni bir fonksiyon var.

Sen gibi geçersiz bir değere sahip bu başlık alanı üzerine yazmayı deneyebilirsiniz:

header('Location: ', true);

Ama müşteri bu tepki bilmiyorum.

Bunu yapmak için iyi bir yol gerçekten yoktur. İki şey akla geliyor:

  1. Bir metin dosyası olarak aç script.php, herhangi bir başlık () komutları dışında şerit ve sonra eval () sonucu.
  2. Eğer çıktı sonra script.php ve sonra tuzak PHP (bir başlık verilmesi hakkında üretir uyarı) eklemek için önce bir boşluk yankı şimdiden başladı. Sen çıktı tamponlama önce boşluk yankı gerekiyordu.

Ne (PHP kodu olarak bir PHP dizeyi ayrıştırmak için kullanılan kötü kelime söz değil), file_get_contents() ile bir değişken olarak ilk dosyayı içeren istenmeyen başlıklarını sıyırma ve daha sonra PHP kodu ile çalışan hakkında?

Eğer emrinde PHP5.3 (muhtemelen yok) yoksa, Gumbo's answer çalışmaz ve eval kullanmak istemiyorsanız, o zaman diğer tek seçenek ben görebiliyorum, bir kullanılmasıdır streams. Bu eval ancak başka, daha esnek ama karmaşık şeklidir. Akarsular, tokenizer ile birlikte, ve basit bir ile bu işlev çağrısı kurtulmak mümkün olacak:

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

Eğer size çıktı daha önce bir dize tam metni olduğundan, basit bir arama ile istediğiniz başlıklarını kaldırmak ve (örneğin regex kullanarak) değiştirin.