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
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
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![]()
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()
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);
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 :
mais cela ne marche pas. je suis un peu debutant je ne vois pas comment faire la .
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'];
Pas très clair comme conclusion. Peux tu expliciter ? (des messages d'erreurs par exemple...).
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;
Partager