PHP - garip bir sorun - Vadesi görünüşte ilişkisiz kod satırına bozuk başlıkları / içerik

0 Cevap php

Ben 3 gün & geçirdim Ilk etapta bir sorun yoktu bir şey düzeltmek için çalışıyor 4. SO sorular. Ancak, asıl sorun artık beni şaşkına etti. Aşağıdaki kodu kıvırmak bakın. Bu doğru belirli bir web sayfası ve görüntüler getirir. Ek bir POST değişkeni ayarlar yorumladı hattı (no. 8) vardır. Bunu yorumsuz, sonra tarayıcı yerine onu görüntüleyen bir gzip dosyasını indirmek için çalışır. Ben bu çizginin ve hiç garip davranışlar arasındaki ilişkiyi bilmiyorum.

(Not: Başkaları bu kodu deneyebilirsiniz yüzden w3schools bir statik url kullanmış benim kendi iç veri sunucusu ve vekil için bu kodu kullanmak çalışıyorum, ve tam olarak aynı sorunla karşı karşıya am uncommenting bu garip davranışları özellikle çizgi sonuçları.. . Ben bu değişkeni kullanmak gerekir. Ben şu anda bir çalışma etrafında biliyorum artı nedenini bulmak için çok merak ediyorum yok).

<?php
session_start();

$i_var_prefix="i_var_";

// Other important client dependent 'SERVER' variables.
if(isset($_SERVER['HTTPS'])) { $_POST["${i_var_prefix}_HTTPS"]=$_SERVER['HTTPS']; };
//if(isset($_SERVER['REMOTE_ADDR'])) { $_POST["${i_var_prefix}_REMOTE_ADDR"]=$_SERVER['REMOTE_ADDR']; };
// STRANGE PROBLEM:: IF I UNCOMMENT THE LINE ABOVE, THEN THE BROWSER DOES NOT DISPLAY THE CONTENT BUT TRIES TO DOWNLOAD IT.

$curl_url="http://www.w3schools.com/TAGS/form_action.asp";


// Set values of these header variables as got from client
$field_array= array(
      'Accept' => 'HTTP_ACCEPT',
      'Accept-Charset' => 'HTTP_ACCEPT_CHARSET',
      'Accept-Encoding' => 'HTTP_ACCEPT_ENCODING',
      'Accept-Language' => 'HTTP_ACCEPT_LANGUAGE',
      'Connection' => 'HTTP_CONNECTION',
      'Host' => 'HTTP_HOST',
      'Referer' => 'HTTP_REFERER',
      'User-Agent' => 'HTTP_USER_AGENT'
      );

$curl_request_headers=array();

foreach ($field_array as $key => $value) {
   if(isset($_SERVER["$value"])) {
      $server_value=$_SERVER["$value"];
      $curl_request_headers[]="$key: $server_value";
   }
};

//------
session_write_close();

//Open connection
$curl_handle = curl_init();
curl_setopt($curl_handle,CURLOPT_COOKIE,session_name()."=".session_id().";");
//Set the url, number of POST vars, POST data
curl_setopt($curl_handle, CURLOPT_URL, $curl_url);
curl_setopt($curl_handle, CURLOPT_POST, count($_POST));
curl_setopt($curl_handle, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $curl_request_headers);


//Execute post
$result = curl_exec($curl_handle);

//Close connection
curl_close($curl_handle);

list($headers,$content)=explode("\r\n\r\n",$result,2);
foreach (explode("\r\n",$headers) as $hdr) {
   header($hdr);
}
echo $content;
?>

UPDATE:

Uncommented hattı ile alınan sonuç başlıkları şunlardır:

HTTP/1.1 100 Continue
HTTP/1.1 200 OK
Date: Wed, 22 Dec 2010 14:32:43 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Content-Length: 478
Content-Type: text/html
Set-Cookie: ASPSESSIONIDSASCDCDT=KIIKANGALGLDJMLFHGPJBBOM; path=/
Cache-control: private

Hat çıkışı yorumladı, sonuç başlıkları şunlardır:

HTTP/1.1 200 OK
Date: Wed, 22 Dec 2010 14:34:21 GMT
Server: Microsoft-IIS/6.0
MicrosoftOfficeWebServer: 5.0_Pub
X-Powered-By: ASP.NET
Content-Length: 478
Content-Type: text/html
Set-Cookie: ASPSESSIONIDSASCDCDT=JLPKANGAHDCNADBMNGHGIMCO; path=/
Cache-control: private

1) Neden fark?

2) Nasıl doğru devam şeyi işlemek için?


SUMMARY:

The reason was that with that line, the number of POST variables increased to more than 1 and curl started automatically sending "Expect:" in header. This made the server respond with "Continue" header, which I was not handling. I am using the solution posted below. The comments, specially Mchl's comments - were very helpful in getting me in the right direction as I had no clue how that line could affect the behaviour.

Saygılarımızla,

JP

0 Cevap