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 :

Test si un l'image d'un lien est egale a 0 octet ou pas


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut Test si un l'image d'un lien est egale a 0 octet ou pas
    Bonjour,

    je voudrais pourvoir tester un llien internet :

    ex: http://monsite.monimage.jpg

    je voudrais savoir si ce lien est égale à 0 octet (dont pas d'image) ou si != 0 octet donc image.

    je vous remercie d'avance.

    Bonne journée

  2. #2
    Membre confirmé Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Par défaut
    Bonjour,

    Je ne suis pas sûr à 100% mais regarde du côté de la fonction filesize pour voir si elle permet de tester des fichiers distants ou non.

    ____ EDIT ____

    En effet, regarde du côté de ce commentaire-ci.

    PS : n'oublie pas le tag Résolu

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    filesize() est un bon point.
    Mais tu fais quand même une confusion :

    1/ d'abord tester si le fichier existe ou pas -> file_exists()

    2/ si le fichier existe : tester si sa taille est égale à zéro (fichier existant, mais vide ou mal enregistré) -> filesize()

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    stat n'est pas émulé/émulable pour le protocole HTTP donc ni file_exists ni filesize ni is_file ni ... ne fonctionneront.

    Un fopen en mode r échouera si la ressource est inexistante (404) ou autre (requête HEAD, cURL par exemple). S'il s'agit bien de déterminer si le document est existant mais vide, alors il faut consulter les entêtes (Content-Length) et/ou le lire (même partiellement - juste le début).

    Un bon début avec 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
    $ch = curl_init('http://...');
    curl_setopt($ch, CURLOPT_NOBODY, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, TRUE);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    if (FALSE === ($ret = curl_exec($ch))) {
        echo 'échec';
    } else if (200 != curl_getinfo($ch, CURLINFO_HTTP_CODE)) {
        echo 'inexistant';
    } else if (curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD) <= 0) {
        echo 'vide';
    } else {
        echo 'ok';
    }
    curl_close($ch);

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par julp Voir le message
    stat n'est pas émulé/émulable pour le protocole HTTP
    c'est vrai. (même si le fichier est sur le serveur)

    Mon raisonnement ci-dessus est quand même valable que pour des liens relatifs (../../dossier-images/monimage.jpg).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 226
    Par défaut
    Bon j'avais regardé du coté filesize, mais cela ne va pas, mon fichier image n'est pas le même a chaque requête.

    Comment puis je faire avec un fopen ...

    De mon coté j'avais essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $url = curl_init(); 
    		curl_setopt($url, CURLOPT_URL, $result_array['meta_value']);
    		curl_setopt($url, CURLOPT_RETURNTRANSFER, true);
    		$urlSizeInfo = curl_getinfo($url);
    		echo $urlSizeInfo['download_content_length'];
    mais cela ne marche pas. je suis un peu debutant je ne vois pas comment faire la .

  7. #7
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    Citation Envoyé par jameson Voir le message
    mais cela ne marche pas. je suis un peu débutant je ne vois pas comment faire la .
    Pas très clair comme conclusion. Peux tu expliciter ? (des messages d'erreurs par exemple...).

    Citation Envoyé par jameson Voir le message
    Comment puis je faire avec un fopen ...
    j'ai rapidement fais ceci pour toi

    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
    22
    23
    24
     
    $poids = 0;
    $params = array( 'http' => array(
                  'method' => 'HEAD',
                  'content' => NULL ) );
     
    $contexte = stream_context_create( $params );
    $res = fopen( 'http://static.php.net/www.php.net/images/php.gif', 'rb', false, $contexte );
     
    if ( $res ) {
    	$reponse = stream_get_contents( $res );
    	if ($reponse !== false) {
         $headers = stream_get_meta_data( $res );
    	 foreach( $headers['wrapper_data'] as $meta ){
    		if( preg_match( '#^Content-Length: (\d*)$#', $meta, $matche ) ){
    			$poids = (int) $matche[1];
    			break;
    		}
    	 }
    	 fclose( $res );
    	}
     }
     
    echo $poids;

Discussions similaires

  1. Réponses: 13
    Dernier message: 15/05/2012, 21h44
  2. Pb pour afficher une image dont le lien est un champ d'une table
    Par h4milton dans le forum SQL Procédural
    Réponses: 13
    Dernier message: 25/05/2007, 13h23
  3. diviser une image en plusieurs liens
    Par mat-tech dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/04/2006, 16h10
  4. [Tableaux] Images aléatoire et lien
    Par antoinelavigne dans le forum Langage
    Réponses: 7
    Dernier message: 17/09/2005, 20h03

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