PHP 3, PHP 4, PHP 5. https:// depuis PHP 4.3.0
http://example.com
http://example.com/file.php?var1=val1&var2=val2
http://user:motdepasse@example.com
https://example.com
https://example.com/file.php?var1=val1&var2=val2
https://user:motdepasse@example.com
Permet des accès en lecture uniquement, pour des fichiers accessibles sur
le réseau avec la méthode GET de HTTP 1.0. Un en-tête Host:
est envoyé avec la requête, pour gérer les hôtes virtuels, basés sur des
noms. Si vous avez configuré une version de navigateur avec
l'option user_agent dans votre
fichier php.ini, ou via le contexte de flux, il sera aussi
utilisé dans votre requête.
| Avertissement |
Lorsque vous utilisez SSL, le
serveur IIS de Microsoft violera le protocole en fermant la connexion sans
envoyer l'indicateur close_notify. PHP le reportera en tant que "SSL: Fatal
Protocol Error" quand vous arrivez à la fin des données. L'astuce est de
baisser le niveau de la directive error_reporting pour ne pas inclure
les warnings.
À partir de PHP 4.3.7, le bogue est détecté automatiquement lors de l'ouverture
du flux en utilisant https:// et supprimera cet avertissement pour vous.
Si vous utilisez fsockopen() pour créer une socket ssl://,
vous devez vous occuper vous même de supprimer l'erreur. |
Les redirections sont supportées depuis PHP 4.0.5; si vous utilisez
une version plus ancienne, vous devrez ajouter vous-même les
slash finaux dans vos URL. S'il est important de connaître l'URL
de la ressource qui vous a fourni le document, une fois que
toutes les redirections ont été suivies, vous devez analyser
les en-têtes de réponses retournés par le flux.
Exemple M-2. http:// et redirections
<?php $url = 'http://www.example.com/redirecting_page.php';
$fp = fopen($url, 'r');
/* Avant PHP 4.3.0 utilisez $http_response_header au lieu de stream_get_meta_data() */ $meta_data = stream_get_meta_data($fp); foreach($meta_data['wrapper_data'] as $response) {
/* Redirections? */ if (substr(strtolower($response), 0, 10) == 'location: ') { /* modification de $url avec la nouvelle URL */ $url = substr($response, 18); }
}
?>
|
|
Exemple M-3. Analyse une page et envoie des données avec la méthode POST
<?php
$postdata = http_build_query( array( 'var1' => 'du contenu', 'var2' => 'doh' ) );
$opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) );
$context = stream_context_create($opts);
$result = file_get_contents('http://example.com/submit.php', false, $context);
?>
|
|
Le flux donne l'accès au corps (body)
de la ressource. Les en-têtes sont stockés dans la variable
$http_response_header. Depuis PHP 4.3.0,
les en-têtes sont aussi accessibles avec la fonction
stream_get_meta_data().
Les connexions HTTP sont en lecture seule. Vous ne pouvez pas écrire
dans des fichiers ouverts via le protocole HTTP.
Note :
HTTPS est supporté depuis PHP 4.3, si vous avez compilé
le support d'OpenSSL.
Tableau M-2. Résumé des gestionnaires
| Attribut | Supporté |
|---|
| Limité par allow_url_fopen. | Oui |
| Autorisé en lecture | Oui |
| Autorisé en écriture | Non |
| Autorisé en ajout | Non |
| Autorise les lectures / écritures simultanées | Non applicable |
| Supporte stat() | Non |
| Supporte unlink() | Non |
| Supporte rename() | Non |
| Supporte mkdir() | Non |
| Supporte rmdir() | Non |
Tableau M-3. Options de contexte (depuis PHP 5.0.0)
| Nom | Utilisation | Par défaut |
|---|
| method |
GET, POST, ou
une autre méthode HTTP acceptée par le serveur distant.
| GET |
| header | Les autres en-têtes envoyés durant la requête. Les valeurs
de cette option remplaceront les valeurs déjà configurées
(comme User-agent:, Host:,
et Authentication:).
| |
| user_agent | Valeur à envoyer pour l'en-tête User-Agent:.
Cette valeur sera utilisée si un type de navigateur
n'est pas spécifié dans l'option
de contexte header ci-dessus.
|
Directive dans le php.ini : user_agent.
|
| content |
D'autres données envoyées après les en-têtes. Typiquement,
utilisé pour placer les requêtes POST ou PUT.
| |
| proxy |
URI du serveur de proxy.
(i.e. tcp://proxy.example.com:5100 ).
Les proxys HTTPS (via les proxys HTTP) ne fonctionnent qu'avec PHP 5.1.0
ou supérieur.
| |
| max_redirects |
Le nombre maximum de redirection à suivre. Une valeur de 1
ou inférieure signifie qu'aucune redirection n'est suivie.
Ajouté en PHP 5.1.0.
| 20 |
| request_fulluri |
Lorsque cette option vaut TRUE, l'URI entière sera utilisée lors
de la construction de la requête. (i.e.
GET http://www.example.com/path/to/file.html HTTP/1.0).
Même si ce n'est pas la méthode standard, certains
proxies le requièrent.
| FALSE |
Options de contexte pour les sockets :
Plusieurs options de contexte supplémentaires sont supportées
par le gestionnaire de transport
Pour les flux http://, voyez les options de
contexte du transport tcp://. Pour les flux
https://, voyez les options de contexte
du transport ssl://.
Les en-têtes personnalisés peuvent être envoyés avec une
requête HTTP dans les versions antérieures à la version 5
en tirant avantage d'un effet de bord dans la gestion de la
configuration INI de user_agent.
Définissez user_agent en n'importe quelle
chaîne valide (comme la chaîne par défaut, PHP/version)
suivi d'un caractère de retour chariot et d'un caractère de nouvelle
ligne, suivis des en-têtes additionnels.
Cette méthode fonctionne en PHP 4 ainsi que toutes les versions
suivantes.
Exemple M-4. Envoi d'en-têtes personnalisés avec une requête HTTP
<?php ini_set('user_agent', "PHP\r\nX-MyCustomHeader: Foo");
$fp = fopen('http://www.example.com/index.php', 'r'); ?>
|
Équivaut à la requête suivante : GET /index.php HTTP/1.0
Host: www.example.com
User-Agent: PHP
X-MyCustomHeader: Foo |
|