Fichier ecrire/inc/distant.php

Ce fichier gère l'obtention de données distantes

Source

Proposer une amélioration

Liste des constantes

Valeur

  • 2097152

Package

Valeur

  • 'SPIP-' . $GLOBALS['spip_version_affichee'] . ' (' . $GLOBALS['home_server'] . ')'

Package

Valeur

  • 'HTTP/1.0'

Package

Valeur

  • ',' . preg_replace('@^https?:@', 'https?:', isset($GLOBALS['meta']['adresse_site']) ? $GLOBALS['meta']['adresse_site'] : '') . '/?spip.php[?]action=acceder_document.file=(.)$,'

Package

Liste des fonctions

Prend en argument un chemin relatif au rep racine, ou une URL Renvoie un chemin relatif au rep racine, ou false

boolean | string copie_locale( string $source , string $mode = 'auto' , string $local = null , integer $taille_max = null )

Paramètres

  1. string $source
  2. string $mode = '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)
  3. string $local = null

    permet de specifier le nom du fichier local (stockage d'un cache par exemple, et non document IMG)

  4. integer $taille_max = null

    taille maxi de la copie local, par defaut _COPIE_LOCALE_MAX_SIZE

Retour

  • boolean | string

Appelle le pipeline

Package

Proposer une amélioration

Soit obtient l'extension du fichier directement de l'URL de la source, soit tente de le calculer.

string fichier_copie_locale( string $source )

Paramètres

  1. string $source

    URL de la source distante

Retour

  • string

    Nom du fichier calculé

Package

Proposer une amélioration

Décompose l'url en son schema+host+path+port et lance la requete. Retourne le descripteur sur lequel lire la réponse.

array init_http( string $method , string $url , boolean $refuse_gz = false , string $referer = '' , string $datas = '' , string $vers = 'HTTP/1.0' , string $date = '' )

Paramètres

  1. string $method

    HEAD, GET, POST

  2. string $url
  3. boolean $refuse_gz = false
  4. string $referer = ''
  5. string $datas = ''
  6. string $vers = 'HTTP/1.0'
  7. string $date = ''

Retour

  • array

Utilisé par

Package

Proposer une amélioration
boolean | resource lance_requete( string $method , string $scheme , array $user , string $host , string $path , string $port , boolean $noproxy , boolean $refuse_gz = false , string $referer = '' , string $datas = '' , string $vers = 'HTTP/1.0' , integer | string $date = '' )

Paramètres

  1. string $method

    type de la requete (GET, HEAD, POST...)

  2. string $scheme

    protocole (http, tls, ftp...)

  3. array $user

    couple (utilisateur, mot de passe) en cas d'authentification http

  4. string $host

    nom de domaine

  5. string $path

    chemin de la page cherchee

  6. string $port

    port utilise pour la connexion

  7. boolean $noproxy

    protocole utilise si requete sans proxy

  8. boolean $refuse_gz = false

    refuser la compression GZ

  9. string $referer = ''

    referer

  10. string $datas = ''

    donnees postees

  11. string $vers = 'HTTP/1.0'

    version HTTP

  12. integer | string $date = ''

    timestamp pour entente If-Modified-Since

Retour

  • boolean | resource

    false|int si echec resource socket vers l'url demandee

Utilisé par

Package

Proposer une amélioration

On peut passer en parametre le proxy et la liste des host exclus, pour les besoins des tests, lors de la configuration

string need_proxy( string $host , string $http_proxy = null , string $http_noproxy = null )

Paramètres

  1. string $host
  2. string $http_proxy = null
  3. string $http_noproxy = null

Retour

  • string

Package

Proposer une amélioration

Si on doit conserver une copie locale des fichiers distants, autant que ca soit à un endroit canonique

string nom_fichier_copie_locale( string $source , string $extension )

Paramètres

  1. string $source

    URL de la source

  2. string $extension

    Extension du fichier

Retour

  • string

    Nom du fichier pour copie locale

Utilisé par

Package

Note

  • Si ca peut être bijectif c'est encore mieux, mais là tout de suite je ne trouve pas l'idee, étant donné les limitations des filesystems
Proposer une amélioration

..

  • 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
array prepare_donnees_post( string | array $donnees , string $boundary = '' )

Paramètres

  1. string | array $donnees
  2. string $boundary = ''

Retour

  • array

    entete,corps

Package

Proposer une amélioration
boolean | integer | string recuperer_body( resource $handle , integer $taille_max = _INC_DISTANT_MAX_SIZE , string $fichier = '' )

Paramètres

  1. resource $handle
  2. integer $taille_max = _INC_DISTANT_MAX_SIZE
  3. string $fichier = ''

    fichier dans lequel copier le contenu de la resource

Retour

  • boolean | integer | string

    bool false si echec int taille du fichier si argument fichier fourni string contenu de la resource

Utilisé par

Package

Proposer une amélioration
boolean | array recuperer_entetes_complets( resource $handle , integer | boolean $if_modified_since = false )

Paramètres

  1. resource $handle
  2. integer | boolean $if_modified_since = false

Retour

  • boolean | array

    int status string headers int last_modified string location

Utilisé par

Package

Proposer une amélioration
array recuperer_infos_distantes( string $source , integer $max , boolean $charger_si_petite_image = true )

Paramètres

  1. string $source

    URL de la source

  2. integer $max

    Taille maximum du fichier à télécharger

  3. boolean $charger_si_petite_image = true

    Pour télécharger le document s'il est petit

Retour

  • array

    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

Utilisé par

Package

Proposer une amélioration
array | boolean recuperer_url( string $url , array $options = array() )

Paramètres

  1. string $url
  2. array $options = array()

    bool transcoder : true si on veut transcoder la page dans le charset du site string methode : Type de requête HTTP à faire (HEAD, GET ou POST) 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 string|array datas : Pour envoyer des donnees (array) et/ou entetes (string) (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)

Retour

  • array | boolean

    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

Package

Proposer une amélioration

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

array | boolean | mixed recuperer_url_cache( string $url , array $options = array() )

Paramètres

  1. string $url
  2. array $options = array()

    int delai_cache : anciennete acceptable pour le contenu (en seconde)

Retour

  • array | boolean | mixed

Package

Proposer une amélioration
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

array | string url_to_ascii( string $url_idn )

Paramètres

  1. string $url_idn

Retour

  • array | string

Package

Proposer une amélioration
false | string valider_url_distante( string $url , array $known_hosts = array() )

Paramètres

  1. string $url
  2. array $known_hosts = array()

    url/hosts externes connus et acceptes

Retour

  • false | string

    url ou false en cas d'echec

Package

Proposer une amélioration

Dépréciées

Lit les entêtes de reponse HTTP sur la socket $f

string | integer | array recuperer_entetes( resource $f , integer | string $date_verif = '' )

Paramètres

  1. resource $f

    Socket d'un fichier (issu de fopen)

  2. integer | string $date_verif = ''

    Pour tester une date de dernière modification

Retour

  • string | integer | array
    • la valeur (chaîne) de l'en-tete Location si on l'a trouvée
    • la valeur (numerique) du statut si different de 200, notamment Not-Modified
    • le tableau des entetes dans tous les autres cas

Utilisé par

Package

Deprecated

Proposer une amélioration
string | array | boolean recuperer_lapage( string $url , boolean | null | string $trans = false , string $get = 'GET' , integer | boolean $taille_max = 1048576 , string | array $datas = '' , boolean $refuser_gz = false , string $date_verif = '' , string $uri_referer = '' )

Paramètres

  1. string $url

    URL de la page à récupérer

  2. boolean | null | string $trans = false
    • chaîne longue : c'est un nom de fichier (nom pour sa copie locale)
    • true : demande d'encodage/charset
    • null : ne retourner que les headers
  3. string $get = 'GET'

    Type de requête HTTP à faire (HEAD, GET ou POST)

  4. integer | boolean $taille_max = 1048576

    Arrêter le contenu au-delà (0 = seulement les entetes ==> requête HEAD). Par defaut taille_max = 1Mo.

  5. string | array $datas = ''

    Pour faire un POST de données

  6. boolean $refuser_gz = false

    Pour forcer le refus de la compression (cas des serveurs orthographiques)

  7. string $date_verif = ''

    Un timestamp unix pour arrêter la récuperation si la page distante n'a pas été modifiée depuis une date donnée

  8. string $uri_referer = ''

    Pour préciser un référer différent

Retour

  • string | array | boolean
    • Retourne l'URL en cas de 301,
    • Un tableau (entête, corps) si ok,
    • false sinon

Utilisé par

Package

Deprecated

Proposer une amélioration

Gère les redirections de page (301) sur l'URL demandée (maximum 10 redirections)

string | boolean recuperer_page( string $url , boolean | string $trans = false , boolean $get_headers = false , integer | null $taille_max = null , string | array $datas = '' , string $boundary = '' , boolean $refuser_gz = false , string $date_verif = '' , string $uri_referer = '' )

Paramètres

  1. string $url

    URL de la page à récupérer

  2. boolean | string $trans = false
    • chaîne longue : c'est un nom de fichier (nom pour sa copie locale)
    • true : demande d'encodage/charset
    • null : ne retourner que les headers
  3. boolean $get_headers = false

    Si on veut récupérer les entêtes

  4. integer | null $taille_max = null

    Arrêter le contenu au-delà (0 = seulement les entetes ==> requête HEAD). Par defaut taille_max = 1Mo.

  5. string | array $datas = ''

    Pour faire un POST de données

  6. string $boundary = ''

    Pour forcer l'envoi par cette méthode

  7. boolean $refuser_gz = false

    Pour forcer le refus de la compression (cas des serveurs orthographiques)

  8. string $date_verif = ''

    Un timestamp unix pour arrêter la récuperation si la page distante n'a pas été modifiée depuis une date donnée

  9. string $uri_referer = ''

    Pour préciser un référer différent

Retour

  • string | boolean
    • Code de la page obtenue (avec ou sans entête)
    • false si la page n'a pu être récupérée (status different de 200)

Utilisé par

Package

Deprecated

Proposer une amélioration