PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

FTP a FTPS> <Zoznam Podporovaných Protokolov/Balíčkov
Last updated: Sun, 25 Nov 2007

view this page in

HTTP a HTTPS

PHP 3, PHP 4, PHP 5. https:// od PHP 4.3.0

  • http://example.com
  • http://example.com/file.php?var1=val1&var2=val2
  • http://user:password@example.com
  • https://example.com
  • https://example.com/file.php?var1=val1&var2=val2
  • https://user:password@example.com

Umožňuje prístup iba na čítanie k súborom/zdrojom cez HTTP 1.0 použitím metódy HTTP GET. Hlavička Host: sa pošle s požiadavkou na zaistenie na mene založených virtuálnych hostov. Ak ste nakonfigurovali reťazec user_agent použitím vášho ini súboru alebo prúdového kontextu, taktiež sa zahrnie do požiadavky.

Warning

Pri používaní SSL, Microsoft IIS naruší protokol ukončením spojenia bez poslania indikátora notifikácie uzavrenia. PHP toto zahlási ako "SSL: Fatal Protocol Error", keď dosiahnete koniec dát. Aby ste sa tomu vyhli, mali by ste znížiť vašu error_reporting úroveň, aby nezahŕňala varovania. PHP 4.3.7 a vyššie dokážu detekovať chybový IIS server software pri otváraní prúdu pomocou https:// wrappera a potlačí varovanie namiesto vás. Ak používate fsockopen() pre tvorbu ssl:// soketu, tak ste zodpovedný za detekovanie a potlačenie varovania sami.

Uz PHP 4.0.5 podporuje presmerovania; ak používate predchádzajúce verzie, budete musieť zahrnúť vodiace lomítka do svojich URL adries. Ak je dôležité vedieť URL zdroja, od kiaľ váš dokument prišiel (po tom, čo boli spracované všetky presmerovania), budete potrebovať spracovať série hlavičiek odoziev vrátených prúdom.

<?php
$url 
'http://www.example.com/redirecting_page.php';

$fp fopen($url'r');

/* V skorsich verziach nez PHP 4.3.0 pouzite $http_response_header 
   namiesto stream_get_meta_data() */
foreach(stream_get_meta_data($fp) as $odozva) {

  
/* Boli sme presmerovany? */
  
if (substr(strtolower($odozva), 010) == 'location: ') {
    
/* aktualizuj $url s tym, kam sme boli presmerovany */
    
$url substr($odozva10);
  }

}

?>

Prúd umožňuje prístup k telu zdroja; hlavičky sú uložené v premennej $http_response_header. Od PHP 4.3.0, hlavičky sú dostupné použitím stream_get_meta_data().

Pripojenia cez HTTP sú iba na čítanie; nemôžete zapisovať dáta alebo kopírovať súbory do HTTP zdroja.

Note: HTTPS podporovalo už PHP 4.3.0, ak ste kompilovali s podporou pre OpenSSL.

Zhrnutie Wrappera
Atribút Podporovaný
Obmedzený cez allow_url_fopen. Áno
Umožňuje Čítanie Áno
Umožňuje Zápis Nie
Umožňuje pridávanie Nie
Umožňuje Súbežné Čítanie a Zápis N/A
Podporuje stat() Nie
Podporuje unlink() Nie
Podporuje rename() Nie
Podporuje mkdir() Nie
Podporuje rmdir() Nie

Voľby kontextu (od PHP 5.0.0)
Názov Použitie Default
method GET alebo POST GET
header Ďalšie hlavičky na odoslanie počas požiadavky. Hodnoty v tejto voľbe anulujú ostatné hodnoty (ako User-agent:, Host: a Authentication:.  
user_agent Hodnoty na odoslanie s hlavičkou User-Agent:. Táto hodnota sa použije iba ak user_agent nie je určený v kontextovej voľbe header uvedenej vyššie. php.ini nastavenie: user_agent
obsah Ďalšie dáta na odoslanie po hlavičkách. Typicky sa používajú s požiadavkami POST alebo PUT.  
proxy URI určujúca adresu proxy servera. (napr. tcp://proxy.example.com:5100 ).  
request_fulluri Keď je nastavená na TRUE, celá URI bude použitá pri konštruovaní požiadavky. (napr. GET http://www.example.com/path/to/file.html HTTP/1.0). Zatialčo je toto neštandardný formát požiadavky, niektoré proxy servery ho vyžadujú. FALSE

Note: Podčiarkovanie soketového prúdu kontextových volieb Ďalšie kontextové voľby možu byť podporované podčiarkujúcim prenosom Pre http:// prúdy si pozrite kontextové voľby pre tcp:// prenos. Pre https:// prúdy si pozrite kontextové voľby pre ssl:// prenos.



FTP a FTPS> <Zoznam Podporovaných Protokolov/Balíčkov
Last updated: Sun, 25 Nov 2007
 
add a note add a note User Contributed Notes
HTTP a HTTPS
Nick Lewis
26-Jun-2008 04:17
A note on how to deal with Cookies

To receive a cookie:

$httphandle = fopen($url,"r");
$meta = stream_get_meta_data($httphandle);
for ($j = 0; isset($meta['wrapper_data'][$j]); $j++) {
   $httpline = $meta['wrapper_data'][$j];
   @list($header,$parameters) = explode(";",$httpline,2);
   @list($attr,$value) = explode(":",$header,2);
   if (strtolower(trim($attr)) == "set-cookie") {
      $cookie = trim($value);
      break;
   }
}
fclose($httphandle);
echo $cookie;

To send a cookie:

$user_agent = ini_get("user_agent");
ini_set("user_agent",$user_agent . "\r\nCookie: " . $cookie);
$httphandle = fopen($url,"r");
fclose($httphandle);
ini_set("user_agent",$user_agent);
spazdaq
24-Oct-2007 03:27
just an FYI about digest authentication.

While one of the above http examples has the username and password info supplied with the url, this must only be for basic authentication. it does not appear to work for digest authentication. you have to handle the digest followup request on your own.
NEA at AraTaraBul dot com
29-Jul-2007 04:06
HTTP post function;

<?php
function post_it($datastream, $url) {

$url = preg_replace("@^http://@i", "", $url);
$host = substr($url, 0, strpos($url, "/"));
$uri = strstr($url, "/");

     
$reqbody = "";
      foreach(
$datastream as $key=>$val) {
          if (!empty(
$reqbody)) $reqbody.= "&";
     
$reqbody.= $key."=".urlencode($val);
      }

$contentlength = strlen($reqbody);
    
$reqheader "POST $uri HTTP/1.1\r\n".
                  
"Host: $host\n". "User-Agent: PostIt\r\n".
    
"Content-Type: application/x-www-form-urlencoded\r\n".
    
"Content-Length: $contentlength\r\n\r\n".
    
"$reqbody\r\n";

$socket = fsockopen($host, 80, $errno, $errstr);

if (!
$socket) {
  
$result["errno"] = $errno;
  
$result["errstr"] = $errstr;
   return
$result;
}

fputs($socket, $reqheader);

while (!
feof($socket)) {
  
$result[] = fgets($socket, 4096);
}

fclose($socket);

return
$result;
}
?>
Sinured
28-Jun-2007 03:24
If you want to send more than one custom header, just make header an array:

<?php
$default_opts
= array(
   
'http' => array(
       
'user_agent' => 'Foobar',
       
'header' => array(
           
'X-Foo: Bar',
           
'X-Bar: Baz'
       
)
    )
);
stream_context_get_default($default_opts);
readfile('http://www.xhaus.com/headers');
?>
dwalton at acm dot org
17-Nov-2006 12:18
As it says on this page:

"The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data()."

This one sentence is the only documentation I have found on the mysterious $http_response_header variable, and I'm afraid it's misleading.  It implies that from 4.3.0 onward, stream_get_meta_data() ought to be used in favor of $http_response_header. 

Don't be fooled!  stream_get_meta_data() requires a stream reference, which makes it ONLY useful with fopen() and related functions.  However, $http_response_header can be used to get the headers from the much simpler file_get_contents() and related functions, which makes it still very useful in 5.x.

Also note that even when file_get_contents() and friends fail due to a 4xx or 5xx error and return false, the headers are still available in $http_response_header.

FTP a FTPS> <Zoznam Podporovaných Protokolov/Balíčkov
Last updated: Sun, 25 Nov 2007
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites