Php ile başka bir ana sunucudan http sayfasını almak ve yönlendirme algılamak nasıl

5 Cevap php

Diyelim ki www.myhost.com bir sunucu var diyelim. Orada php kullanarak itibaren ben php dosya www.anotherhost.com / somefile.php üreten html belgeyi almak istiyorum. Ben de bunu yapmak için php kullanmak istiyorum. anotherhost myhost olarak aynı sunucuda değildir.

Böyle fopen, f_get_contents ve dosya gibi işlevler sadece örneğin çalıştırarak bunu biliyorum

$fp = fopen ("http://www.anotherhost.com/somefile.php")

ve oradan fp içeriğini okumak için herhangi başka bir dosya işaretçisi olarak kullanılabilir.

ANCAK, nedense Ben de somefile.php 'nin çıkan html belgeyi almak için çalıştım anotherhost de somefile.php bir istemci taraflı yönlendirme sipariş olmadığını bilmek istiyorum. somefile.php yapabilirsiniz

header ("Location: http://www.anotherhost.com/extrafile.php")

Şimdi fopen bir istemci tarafında yönlendirme yapılmıştır bu tespit olmadan, extrafile.php üreten html belgeyi almak olacaktır.

Diğer sunuculardan html belgeleri almak sağlar ve bir yönlendirme yerini almıştır eğer size bildirir PHP bazı işlevler var mı? Sürece ben yeni bir URL ne söylediler olarak, (otomatik olarak bitmiş değil) kendim yönlendirmeyi takip etmelidir eğer kabul edilebilir.

Fonksiyon sistemi ile keyfi komutlar çalıştırarak tercih edilmez.

PS. Eğer fsockopen öneririz gidiyor iseniz i http "soket ulaşım bulmak için açılamıyor" hatası alıyorum, neden sonra açıklamak lütfen "- Eğer PHP yapılandırıldığında etkinleştirmek için unutmak mı" Ben yürütmek çalıştığınızda

fsockopen ("http://localhost")

Ben ne zaman ve ben de "localhost" adresi ayrıştırılamadı "olsun

fsockopen ("localhost")

Okuduğunuz için teşekkürler. Yardım büyük mutluluk duyacağız.

5 Cevap

Php 5.2 olarak dere API kullanmak ve bir stream_notification_callback olabilir

örneğin

function notification($code, $severity, $message, $mcode, $transferred, $max) {
  if ( STREAM_NOTIFY_REDIRECTED===$code ) {
    echo 'redirected to ', $message, "\n";
  }
}
$ctx = stream_context_create(null, array('notification' => 'notification'));
$c = file_get_contents("http://spiegel.de", false, $ctx);
echo 'len=', strlen($c);

baskılar

redirected to http://www.spiegel.de/
len=144446

Zend Framework gelen Zend_Http_Client kullanabilirsiniz. Bu yönlendirmelerin sayısını alma yanı sıra, sadece nasıl yapıldığını bilmek istiyorsanız, o zaman kaynak koduna bakmak ve onu anlamaya çalışın vb takip yönlendirmelerin sayısına bir sınır ayarı için yöntemleri vardır. Çok zor bence olmamalı.

Bunun için cURL kullanabilirsiniz. Yönlendirme başlığında belirtilen yoksa bunun yerine örneğin apache mod_rewrite, o zaman bir yönlendirme cevap tarafından gönderildi başlıklarını tüm kapma tarafından mevcut olup olmadığını tespit etmek gerekir.

İsteğe bağlı olarak, otomatik yönlendirmeyi (http://us.php.net/manual/en/function.curl-setopt.php) izlemek için bir ayar var.

Muhtemelen () / file_get_contents () sarma ve fopen akışı değil, tam bir HTTP istemcisi istiyorum. Ben olası () stream_get_meta_data kullanarak akım sarmalayıcılarla ne istediğinizi yapmak için düşünüyorum ama bir daha dolgun uygulama ile daha iyi olurdu.

Eğer Zend veya dere rota aşağı gitmek istemiyorsanız, her zaman cURL functions kullanabilirsiniz. Bu nedenle bu herhangi yeniden yönlendirir ihraç ediliyor olmadığını anlamak için analiz edebilirsek, sen başlıklarını geri izin verir.

(Ayrıca bu yeniden yönlendirir takip gerektiğini belirtmek için 'CURLOPT_MAXREDIRS' seçeneğini kullanabilirsiniz.)