IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Enregistrer automatiquerment une miniature d'url générée


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut Enregistrer automatiquerment une miniature d'url générée
    Bonjour,

    En me basant sur des outils en ligne, notamment ici mShots de WordPress, je génère une miniature d'url de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $mshot = 'http://s.wordpress.com/mshots/v1/';
    $url = 'http://www.google.fr';
    $w = '100';
    $h = '100';
     
    $img = '<img src="'.$mshot.''.urlencode($url).'?w='.$w.'&h='.$h.'" alt="" target="_blank"/>';
    echo $img;
    Quelle solution je peux utiliser par la suite pour enregistrer automatiquement cette vignette sur le serveur ? L'objectif est que toute la procédure soit automatique, et que l'utilisateur n'ait pas à intervenir.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tout d'abord ce code ne produit pas une vignette, il produit une image pleine page et demande seulement au navigateur de l'afficher en 100x100.

    Pour recupérer l'image :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents('tonfichier.jpg', file_get_contents($mshot.''.urlencode($url));
    Après il faudra faire un redimensionnement en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Effectivement la "vignette" est bien créée en taille réelle.

    Quoi qu'il en soit, l'utilisation de la fonction file_get_contents me retourne une erreur 403 Forbidden selon la source d'url.

    J'ai donc voulu contourner le problème en passant par cURL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $fichier = "test.jpg";
    $url = $mshot.''.urlencode($url);
    $fp = fopen($fichier, 'w');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    $data = curl_exec($ch);
    $curl_errno = curl_errno($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    fclose($fp);
     
    if ($curl_errno > 0) {
    	echo "Erreur cURL ($curl_errno): $curl_error\n";
    } else {
    	echo "Image enregistrée";
    }
    J'obtiens bien le message "Image enregistrée", mais l'image créée est vide !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est normal que l'image soit vide tu n'écris rien dedans


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $fichier = "test.jpg";
    $url = $mshot.''.urlencode($url);
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    $data = curl_exec($ch);
    $curl_error = curl_error($ch);
    curl_close($ch);
    file_put_contents($fichier, $data);
     
    if ($curl_errno > 0) {
    	echo "Erreur cURL ($curl_errno): $curl_error\n";
    } else {
    	echo "Image enregistrée";
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Merci pour l'aide. J'ai réussi à faire fonctionner mon code de cette manière, pour qu'il fonctionne également sur les urls en https :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
     
    $raw = curl_exec($curl);
    $curl_errno = curl_errno($curl);
    curl_close($curl);
    if ($curl_errno==0) {
    	if (!file_exists($fichier)){
    		$fp = fopen($fichier, 'w');
    		fwrite($fp, $raw);
    		fclose($fp);
    	}
    } else {
    	echo 'Erreur';
    }

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    fopen, fwrite, fclose c'est file_put_contents.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    581
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 581
    Par défaut
    Oui exact. C'est corrigé, et plus propre !
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Enregistrement d'une vidéo à partir d'un URL
    Par alice87 dans le forum Android
    Réponses: 5
    Dernier message: 13/10/2011, 12h04
  2. [2.x] Intégrer une url générée via une route dans du javascript
    Par kalash_jako dans le forum Symfony
    Réponses: 1
    Dernier message: 30/07/2011, 07h57
  3. Réponses: 10
    Dernier message: 01/08/2003, 13h45
  4. Trouver le dernier enregistrement d'une table
    Par remi59 dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/03/2003, 14h54
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo