File_get_contents ile çerezleri göndermek mümkün değildir

4 Cevap php

I'm trying to get the contents from another file with file_get_contents (don't ask why). I have two files: test1.php and test2.php. Test1.php returns a string, bases on the user that is logged in.

Test2.php test1.php içeriğini almak için çalışır ve böylece çerezleri alma, tarayıcı tarafından yürütülmektedir.

File_get_contents ile çerezleri göndermek için, ben bir akış içeriğini oluşturmak:

$opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"))`;

Ben içeriğini retreiving ediyorum:

$contents = file_get_contents("http://www.domain.com/test1.php", false, $opts);

Ama şimdi hata alıyorum:

Uyarı: file_get_contents (http://www.domain.com/test1.php) [function.file-get-içindekiler]: failed to open stream: HTTP isteği başarısız oldu! HTTP/1.1 404 Not Found

Biri burada wroing ne yapıyorum biliyor mu?

edit: forgot to mention: Without the streaming_context, the page just loads. But withouth the cookies I don't get the info I need.

4 Cevap

Öncelikle, bu muhtemelen sizin soruya sadece bir yazım hatası olduğunu, ancak file_get_contents üçüncü argümanlar () streaming bağlam DEĞİL seçenekler dizisi olması gerekir. Ben böyle bir şey ile bir hızlı test koştu ve her şey beklendiği gibi çalıştı

$opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));
$context = stream_context_create($opts);
$contents = file_get_contents('http://example.com/test1.txt', false, $context);
echo $contents;

Hata sunucu 404 dönen gösterir. Sizin iş istasyonu / masaüstü / dizüstü URL from the machine PHP is running on ve not getiriliyor sahipsiniz. Bu web sunucusu, sorun sitesine ulaşan yaşıyor yerel makine önbelleğe alınmış bir kopyasını veya bazı diğer ağ screwiness sahip olabilir.

Eğer (komut satırı kıvırmak için bu iyidir) yolluyoruz çerez dahil olmak üzere, bu testi çalıştırırken tam isteği tekrarlamak emin olun. Söz konusu sayfa çerez olmadan bir tarayıcıda ince yükleyebilirsiniz tamamen mümkündür, ancak çerez göndermek zaman site aslında bir 404 dönüyor.

$ _SERVER ['HTTP_COOKIE'] bunu yapar düşünüyorum ham çerez sahip olduğundan emin olun.

Eğer ekran kazıma iseniz, Firefox ve LiveHTTPHeaders uzantısı bir kopyasını indirebilirsiniz. Eğer Firefox istediğiniz ne olursa olsun sayfa ulaşmak için tüm gerekli adımları uygulayın. Sonra, LiveHTTPHeaders gelen çıkışını kullanarak, aynı isteği requence yeniden. Her başlık, not sadece çerezleri içerir.

Son olarak, PHP Curl, bir nedeni var. Eğer mümkünse, (ben sormuyorum!) Yerine onu kullanın. :)

Just to share this information. When using session_start(), the session file is lock by PHP. Thus the actual script is the only script that can access the session file. If you try to access it via fsockopen() or file_get_contents() you can wait a long time since you try to open a file that has been locked.

Bu sorunu çözmek için bir yolu dosyayı açmak ve * session_start () * ile sonra tekrar kilitlemek için *session_write_close()* kullanmaktır.

Örnek:

<?php
$opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));
$context = stream_context_create($opts);
session_write_close(); // unlock the file
$contents = file_get_contents('http://120.0.0.1/controler.php?c=test_session', false, $context);
session_start(); // Lock the file
echo $contents;

>

File_get_contents bir engelleme fonksiyonu olduğundan oturum dosyasını değiştirmek için çalışırken, her iki senaryo eşzamanlılık olmayacaktır.

Ama bu bir uzatmak bağlantısı ile oturum işlemek için en iyi şekilde değildir eminim. Btw: Bu cURL daha hızlı ve fsockopen bulunuyor ()

Eğer daha iyi bir şey bulursan bana haber ver.

Sadece meraktan soruyorum, bunu bir alana sahip bir sayfada file_get_contents çalışıyorsunuz? Ben adında bir boşluk vardı bir URL FGC kullanmaya çalışırken hatırlıyorum ve benim web tarayıcısı çözümlü ederken sadece iyi, fgc vermedi. Ben '% 20' ile 'bir str_replace' değiştirmek için kullanmak zorunda sona erdi.

Ben bu noktaya nispeten kolay olması gerektiğini düşünürdüm ama bu dosya sadece yarısını rapor gibi. Ayrıca, ben başlıkları tanımlarken birisi \ r \ n kullanılır, bu mesajların birinde fark ettim. PHP bu tek tırnak olmak sevmez unutmayın, ama onlar çift ince çalışır.

Dosya1.php sunucuda var olduğundan emin olun. Emin olmak için kendi tarayıcınızda açmayı deneyin!