Distant
Table of Contents
- _DELAI_RECUPERER_URL_CACHE = 3600
- _INC_DISTANT_CONNECT_TIMEOUT = 10
- _INC_DISTANT_CONTENT_ENCODING = 'gzip'
- _INC_DISTANT_MAX_SIZE = 2097152
- _INC_DISTANT_USER_AGENT = 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')'
- _INC_DISTANT_VERSION_HTTP = 'HTTP/1.0'
- _REGEXP_COPIE_LOCALE = ',' . \preg_replace('@^https?:@', 'https?:', $GLOBALS['meta']['adresse_site'] ?? '') . '/?spip.php[?]action=acceder_document.*file=(.*)$,'
- copie_locale() : bool|string
- Crée au besoin la copie locale d'un fichier distant
- valider_url_distante() : false|string
- Valider qu'une URL d'un document distant est bien distante et pas une url localhost qui permet d'avoir des infos sur le serveur inspiree de https://core.trac.wordpress.org/browser/trunk/src/wp-includes/http.php?rev=36435#L500
- prepare_donnees_post() : array<string|int, mixed>
- Preparer les donnes pour un POST si $donnees est une chaine - charge a l'envoyeur de la boundariser, de gerer le Content-Type, de séparer les entetes des données par une ligne vide etc... - on traite les retour ligne pour les mettre au bon format - on decoupe en entete/corps (separes par ligne vide) si $donnees est un tableau - structuration en chaine avec boundary si necessaire ou fournie et bon Content-Type
- url_to_ascii() : array<string|int, mixed>|string
- Convertir une URL dont le host est en utf8 en ascii Utilise la librairie https://github.com/phlylabs/idna-convert/tree/v0.9.1 dans sa derniere version compatible toutes version PHP 5 La fonction PHP idn_to_ascii depend d'un package php5-intl et est rarement disponible
- recuperer_url() : array<string|int, mixed>|bool
- Récupère le contenu d'une URL au besoin encode son contenu dans le charset local
- recuperer_url_cache() : array<string|int, mixed>|bool|mixed
- Récuperer une URL si on l'a pas déjà dans un cache fichier
- recuperer_body() : bool|int|string
- Recuperer le contenu sur lequel pointe la resource passee en argument $taille_max permet de tronquer de l'url dont on a deja recupere les en-tetes
- recuperer_entetes_complets() : bool|array<string|int, mixed>
- Lit les entetes de reponse HTTP sur la socket $handle et retourne false en cas d'echec, un tableau associatif en cas de succes, contenant : - le status - le tableau complet des headers - la date de derniere modif si connue - l'url de redirection si specifiee
- nom_fichier_copie_locale() : string
- Calcule le nom canonique d'une copie local d'un fichier distant
- fichier_copie_locale() : string
- Donne le nom de la copie locale de la source
- recuperer_infos_distantes() : array<string|int, mixed>|false
- Récupérer les infos d'un document distant, sans trop le télécharger
- distant_trouver_extension_selon_headers() : false|mixed
- need_proxy() : string
- Tester si un host peut etre recuperer directement ou doit passer par un proxy
- init_http() : array<string|int, mixed>
- Initialise une requete HTTP avec entetes
- lance_requete() : bool|resource
- Lancer la requete proprement dite
Constants
_DELAI_RECUPERER_URL_CACHE
public
mixed
_DELAI_RECUPERER_URL_CACHE
= 3600
_INC_DISTANT_CONNECT_TIMEOUT
public
mixed
_INC_DISTANT_CONNECT_TIMEOUT
= 10
_INC_DISTANT_CONTENT_ENCODING
public
mixed
_INC_DISTANT_CONTENT_ENCODING
= 'gzip'
_INC_DISTANT_MAX_SIZE
public
mixed
_INC_DISTANT_MAX_SIZE
= 2097152
_INC_DISTANT_USER_AGENT
public
mixed
_INC_DISTANT_USER_AGENT
= 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')'
_INC_DISTANT_VERSION_HTTP
public
mixed
_INC_DISTANT_VERSION_HTTP
= 'HTTP/1.0'
_REGEXP_COPIE_LOCALE
public
mixed
_REGEXP_COPIE_LOCALE
= ',' . \preg_replace('@^https?:@', 'https?:', $GLOBALS['meta']['adresse_site'] ?? '') . '/?spip.php[?]action=acceder_document.*file=(.*)$,'
Functions
copie_locale()
Crée au besoin la copie locale d'un fichier distant
copie_locale(string $source[, string $mode = 'auto' ][, string $local = null ][, int $taille_max = null ][, string $callback_valider_url = null ]) : bool|string
Prend en argument un chemin relatif au rep racine, ou une URL Renvoie un chemin relatif au rep racine, ou false
Parameters
- $source : string
- $mode : string = 'auto'
-
- 'test' - ne faire que tester
- 'auto' - charger au besoin
- 'modif' - Si deja present, ne charger que si If-Modified-Since
- 'force' - charger toujours (mettre a jour)
- $local : string = null
-
permet de specifier le nom du fichier local (stockage d'un cache par exemple, et non document IMG)
- $taille_max : int = null
-
taille maxi de la copie local, par defaut _COPIE_LOCALE_MAX_SIZE
- $callback_valider_url : string = null
-
fonction de callback pour valider l'URL finale apres redirection eventuelle
Tags
Return values
bool|string —valider_url_distante()
Valider qu'une URL d'un document distant est bien distante et pas une url localhost qui permet d'avoir des infos sur le serveur inspiree de https://core.trac.wordpress.org/browser/trunk/src/wp-includes/http.php?rev=36435#L500
valider_url_distante(string $url[, array<string|int, mixed> $known_hosts = [] ]) : false|string
Parameters
- $url : string
- $known_hosts : array<string|int, mixed> = []
-
url/hosts externes connus et acceptes
Return values
false|string —url ou false en cas d'echec
prepare_donnees_post()
Preparer les donnes pour un POST si $donnees est une chaine - charge a l'envoyeur de la boundariser, de gerer le Content-Type, de séparer les entetes des données par une ligne vide etc... - on traite les retour ligne pour les mettre au bon format - on decoupe en entete/corps (separes par ligne vide) si $donnees est un tableau - structuration en chaine avec boundary si necessaire ou fournie et bon Content-Type
prepare_donnees_post(string|array<string|int, mixed> $donnees[, string $boundary = '' ]) : array<string|int, mixed>
Parameters
- $donnees : string|array<string|int, mixed>
- $boundary : string = ''
Return values
array<string|int, mixed> —entete,corps
url_to_ascii()
Convertir une URL dont le host est en utf8 en ascii Utilise la librairie https://github.com/phlylabs/idna-convert/tree/v0.9.1 dans sa derniere version compatible toutes version PHP 5 La fonction PHP idn_to_ascii depend d'un package php5-intl et est rarement disponible
url_to_ascii(string $url_idn) : array<string|int, mixed>|string
Parameters
- $url_idn : string
Return values
array<string|int, mixed>|string —recuperer_url()
Récupère le contenu d'une URL au besoin encode son contenu dans le charset local
recuperer_url(string $url[, array<string|int, mixed> $options = [] ]) : array<string|int, mixed>|bool
Parameters
- $url : string
- $options : array<string|int, mixed> = []
-
bool transcoder : true si on veut transcoder la page dans le charset du site string methode : Type de requête HTTP à faire (HEAD, GET, POST, PUT, DELETE) int taille_max : Arrêter le contenu au-delà (0 = seulement les entetes ==> requête HEAD). Par defaut taille_max = 1Mo ou 16Mo si copie dans un fichier array headers : tableau associatif d'entetes https a envoyer string|array datas : Pour envoyer des donnees (array) et/ou entetes au complet, avec saut de ligne entre headers et donnees ( string @see prepare_donnees_post()) (force la methode POST si donnees non vide) string boundary : boundary pour formater les datas au format array bool refuser_gz : Pour forcer le refus de la compression (cas des serveurs orthographiques) int if_modified_since : Un timestamp unix pour arrêter la récuperation si la page distante n'a pas été modifiée depuis une date donnée string uri_referer : Pour préciser un référer différent string file : nom du fichier dans lequel copier le contenu int follow_location : nombre de redirections a suivre (0 pour ne rien suivre) string version_http : version du protocole HTTP a utiliser (par defaut defini par la constante _INC_DISTANT_VERSION_HTTP)
Tags
Return values
array<string|int, mixed>|bool —false si echec array sinon : int status : le status de la page string headers : les entetes de la page string page : le contenu de la page (vide si copie dans un fichier) int last_modified : timestamp de derniere modification string location : url de redirection envoyee par la page string url : url reelle de la page recuperee int length : taille du contenu ou du fichier
string file : nom du fichier si enregistre dans un fichier
recuperer_url_cache()
Récuperer une URL si on l'a pas déjà dans un cache fichier
recuperer_url_cache(string $url[, array<string|int, mixed> $options = [] ]) : array<string|int, mixed>|bool|mixed
Le délai de cache est fourni par l'option delai_cache
Les autres options et le format de retour sont identiques à la fonction recuperer_url
Parameters
- $url : string
- $options : array<string|int, mixed> = []
-
int delai_cache : anciennete acceptable pour le contenu (en seconde)
Tags
Return values
array<string|int, mixed>|bool|mixed —recuperer_body()
Recuperer le contenu sur lequel pointe la resource passee en argument $taille_max permet de tronquer de l'url dont on a deja recupere les en-tetes
recuperer_body(resource $handle[, int $taille_max = _INC_DISTANT_MAX_SIZE ][, string $fichier = '' ]) : bool|int|string
Parameters
- $handle : resource
- $taille_max : int = _INC_DISTANT_MAX_SIZE
- $fichier : string = ''
-
fichier dans lequel copier le contenu de la resource
Return values
bool|int|string —bool false si echec int taille du fichier si argument fichier fourni string contenu de la resource
recuperer_entetes_complets()
Lit les entetes de reponse HTTP sur la socket $handle et retourne false en cas d'echec, un tableau associatif en cas de succes, contenant : - le status - le tableau complet des headers - la date de derniere modif si connue - l'url de redirection si specifiee
recuperer_entetes_complets(resource $handle[, int|bool $if_modified_since = false ]) : bool|array<string|int, mixed>
Parameters
- $handle : resource
- $if_modified_since : int|bool = false
Return values
bool|array<string|int, mixed> —int status string headers int last_modified string location
nom_fichier_copie_locale()
Calcule le nom canonique d'une copie local d'un fichier distant
nom_fichier_copie_locale(string $source, string $extension) : string
Si on doit conserver une copie locale des fichiers distants, autant que ca soit à un endroit canonique
Parameters
- $source : string
-
URL de la source
- $extension : string
-
Extension du fichier
Tags
Return values
string —Nom du fichier pour copie locale
fichier_copie_locale()
Donne le nom de la copie locale de la source
fichier_copie_locale(string $source) : string
Soit obtient l'extension du fichier directement de l'URL de la source, soit tente de le calculer.
Parameters
- $source : string
-
URL de la source distante
Tags
Return values
string —Nom du fichier calculé
recuperer_infos_distantes()
Récupérer les infos d'un document distant, sans trop le télécharger
recuperer_infos_distantes(string $source[, array<string|int, mixed> $options = [] ]) : array<string|int, mixed>|false
Parameters
- $source : string
-
URL de la source
- $options : array<string|int, mixed> = []
-
int $taille_max : Taille maximum du fichier à télécharger bool $charger_si_petite_image : Pour télécharger le document s'il est petit string $callback_valider_url : callback pour valider l'URL finale du document apres redirection
Return values
array<string|int, mixed>|false —Couples des informations obtenues parmis :
- 'body' = chaine
- 'type_image' = booleen
- 'titre' = chaine
- 'largeur' = intval
- 'hauteur' = intval
- 'taille' = intval
- 'extension' = chaine
- 'fichier' = chaine
- 'mime_type' = chaine
distant_trouver_extension_selon_headers()
distant_trouver_extension_selon_headers(string $source, string $headers) : false|mixed
Parameters
- $source : string
- $headers : string
Return values
false|mixed —need_proxy()
Tester si un host peut etre recuperer directement ou doit passer par un proxy
need_proxy(string $host[, string $http_proxy = null ][, string $http_noproxy = null ]) : string
On peut passer en parametre le proxy et la liste des host exclus, pour les besoins des tests, lors de la configuration
Parameters
- $host : string
- $http_proxy : string = null
- $http_noproxy : string = null
Return values
string —init_http()
Initialise une requete HTTP avec entetes
init_http(string $method, string $url[, bool $refuse_gz = false ][, string $referer = '' ][, string $datas = '' ][, string $vers = 'HTTP/1.0' ][, string $date = '' ]) : array<string|int, mixed>
Décompose l'url en son schema+host+path+port et lance la requete. Retourne le descripteur sur lequel lire la réponse.
Parameters
- $method : string
-
HEAD, GET, POST
- $url : string
- $refuse_gz : bool = false
- $referer : string = ''
- $datas : string = ''
- $vers : string = 'HTTP/1.0'
- $date : string = ''
Tags
Return values
array<string|int, mixed> —lance_requete()
Lancer la requete proprement dite
lance_requete(string $method, string $scheme, array<string|int, mixed> $user, string $host, string $path, string $port, bool $noproxy[, bool $refuse_gz = false ][, string $referer = '' ][, string $datas = '' ][, string $vers = 'HTTP/1.0' ][, int|string $date = '' ]) : bool|resource
Parameters
- $method : string
-
type de la requete (GET, HEAD, POST...)
- $scheme : string
-
protocole (http, tls, ftp...)
- $user : array<string|int, mixed>
-
couple (utilisateur, mot de passe) en cas d'authentification http
- $host : string
-
nom de domaine
- $path : string
-
chemin de la page cherchee
- $port : string
-
port utilise pour la connexion
- $noproxy : bool
-
protocole utilise si requete sans proxy
- $refuse_gz : bool = false
-
refuser la compression GZ
- $referer : string = ''
-
referer
- $datas : string = ''
-
donnees postees
- $vers : string = 'HTTP/1.0'
-
version HTTP
- $date : int|string = ''
-
timestamp pour entente If-Modified-Since
Return values
bool|resource —false|int si echec resource socket vers l'url demandee