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 :

Boucle sur fichier texte, tester des liens.


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut Boucle sur fichier texte, tester des liens.
    Bonjour,
    Voilà, je veux tester l'existence de fichiers sur un forum de plomberie (le PER)
    Ces fichiers sont des images.
    Les liens des images sont dans notés dans un fichier texte.

    J'ai fait un script que je teste en local avec WampServer.

    Le fichier avec les fonctions
    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
    25
    26
     
    <?php
     
    function urlfilesize($lien,$thereturn) {
    if (substr($Ligne,0,4)=='http') {
    $x = array_change_key_case(get_headers($Ligne, 1),CASE_LOWER);
    $x = $x['content-length'];
                }
    else { $x = @filesize($lien); }
    if (!$thereturn) { return $x ; }
    elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
    elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
    //modification 
     
    function test_lien($lien){
    //verification de l'éxistance d'un protocole, sinon, utilisation de http:// par defaut
    $lien = (substr($lien, 0, 7) == "http://" or substr($lien, 0, 8) == "https://" or substr($lien, 0, 6) == "ftp://")?$lien:"http://".$lien;
    //test du lien
    $test = @fopen($lien, 'r');
     
    //retour du resultat
    return ($test)? "Le lien suivant est valide : " : "Le lien suivant est mort : ";
    }
     
    ?>
    Le fichier avec les testes :
    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
    25
    26
    27
    28
     
    <?php
     
    include "a1.php";
    $filename = '04-1.txt';
     
    if (file_exists($filename)) {
       $fp = fopen($filename,"r"); 
     
    while(!feof($fp)) { // tant que l'on est pas a la fin du fichier 
     
    	// On récupère une ligne
     
    		$lien = fgets($fp,255); 
     
     
    echo test_lien($lien);echo" - Taille : "; echo urlfilesize($lien, 'mb'); Echo" Mo<br>";
     
    // On stocke l'ensemble des lignes dans une variable
    	}
    		$Fichier .= $lien;	 
    	}
     
    	fclose($fp); // On ferme le fichier
     
    fclose($fp);  
     
    ?>

    04-1.txt contient les lien à tester.
    "include "a1.php" = les fonctions
    Au début: ma fonction se situait dans une boucle.

    J'avais donc l'erreur : Fatal error: Cannot redeclare test_lien()

    Il doit y avoir de grosses boulettes;
    Ce que je veux faire:
    Ouvrir le fichier texte (qui contient les liens des images)
    Puis tester si les liens sont valides;
    Affichage par un echo du lien et de la taille de l'image.
    C'est du bricolage, mais je suis débutant.

  2. #2
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Bonjour,

    Et qu'est ce qui ne fonctionne pas ?

    Gillou

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci LeGilou
    de répondre aussi vite.

    Ce qui ne fonctionne pas :
    Affichage par un echo du lien et de la taille de l'image.

    en local avec WAMPSERVER.

  4. #4
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    il faut commencer par tester tes fonctions seules, avec un code comme celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $link1 = "http://www.developpez.net/forums/images/logo16.gif";
    $link2 = "http://www.marchepas.test/image.gif";
     
    echo test_lien($link1) . "<br>";
    echo test_lien($link2) . "<br>";
    echo urlfilesize($link1, 'kb');
    Gillou.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    LeGilou

    J'ai testé toujours en local avec :

    pris au hasard du net.

    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
     
    <?php
     
    //test si url=lien
    $url .= $lien;  // fonctionne
    function urlfilesize($lien,$thereturn) {
    if (substr($lien,0,4)=='http') {
    $x = array_change_key_case(get_headers($lien, 1),CASE_LOWER);
    $x = $x['content-length'];
                }
    else { $x = @filesize($lien); }
    if (!$thereturn) { return $x ; }
    elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
    elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
     
    echo urlfilesize('http://localhost/TEST/Lescentralesnucleaires.bmp', 'mb'); Echo  " Mo";
     
    ?>
    et c'est ok ! avec ce code.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    A mon avis c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo test_lien($lien);echo" - Taille : "; echo urlfilesize($lien, 'mb'); Echo" Mo<br>";
    qui était dans le fichier a1.php.

    Cette ligne est elle bien à sa place ?

  7. #7
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Peux tu remplacer ton code par celui là :
    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
     
    <?php
     
    include "a1.php";
    $filename = '04-1.txt';
    $fichier = "";
    if (file_exists($filename)) {
      $fp = fopen($filename, "r"); 
     
      while(!feof($fp)) { // tant que l'on est pas a la fin du fichier 
        $lien = fgets($fp,255); 
     
        echo $lien. "<br>";
        echo test_lien($lien) . "<br>";
        echo "Taille : " . urlfilesize($lien, 'mb') . " Mo<br>";
        echo "<hr>";
     
        $fichier .= $lien;	 
      }
    }
     
    fclose($fp); // On ferme le fichier
     
    ?>
    Gillou

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Merci LeGilou


    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
     
    <?php
     
    include "a1.php";
    $filename = '04-1.txt';
    $fichier = "";
    if (file_exists($filename)) {
      $fp = fopen($filename, "r"); 
     
      while(!feof($fp)) { // tant que l'on est pas a la fin du fichier 
        $lien = fgets($fp,255); 
     
        echo $lien. "<br>";
        echo test_lien($lien) . "<br>";
        echo "Taille : " . urlfilesize($lien, 'mb') . " Mo<br>";
        echo "<hr>";
     
        $fichier .= $lien;	 
      }
    }
     
    fclose($fp); // On ferme le fichier
     
    ?>
    J'ai modifié le fichier 04-1.txt
    j'ai mis des liens en local et des liens sur mon site.

    Pour les liens en local, j'ai tjrs :
    Le lien suivant est mort :
    Taille : 0 Mo

    Pour les liens distants :

    Le lien suivant est valide :
    Taille : 0 Mo

  9. #9
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    j'avais pas bien compris le problème.
    Test 2 fonctions ne fonctionnent pas correctement.

    pour urlfilesize() ca marche pas comme ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function urlfilesize($lien,$thereturn) {
      $x = filesize($lien); 
      if (!$thereturn) { return $x ; }
      elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
      elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
    Gillou

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Oui
    LeGilou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function urlfilesize($lien,$thereturn) {
      $x = filesize($lien); 
      if (!$thereturn) { return $x ; }
      elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
      elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
    Ton code ne fonctionne pas;le mien non plus

    Le mien qui est dans a1.php:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //test si url=lien
    $url .= $lien;  // fonctionne
    function urlfilesize($lien,$thereturn) {
    if (substr($lien,0,4)=='http') {
    $x = array_change_key_case(get_headers($lien, 1),CASE_LOWER);
    $x = $x['content-length'];
                }
    else { $x = @filesize($lien); }
    if (!$thereturn) { return $x ; }
    elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
    elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
    Sur ton code j'ai un Warning: filesize() [function.filesize]:

    Sur : C:\wamp\www\TEST\a1.php on line 24
    La ligne 24 : $x = filesize($lien);

  11. #11
    Membre confirmé Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Points : 531
    Points
    531
    Par défaut
    Sur ton code j'ai un Warning: filesize() [function.filesize]:
    C'est quoi le reste du message ?

  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Le voilou
    Warning: filesize() [function.filesize]: stat failed for http://localhost/TEST/Lescentralesnucleaires.bmp in C:\wamp\www\TEST\a1.php on line 24

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    Je comprends plus !

    Même avec des fichiers plus gros, j'ai :

    Le lien suivant est mort : http://localhost/TEST/aksel.avi - Taille : 0 Mo
    Le lien suivant est mort : http://localhost/TEST/Le.Redeploiement.Militaire.avi - Taille : 0 Mo

    en utilisant celui là :

    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
     
    $url .= $lien;
    function urlfilesize($lien,$thereturn) {
    if (substr($Ligne,0,4)=='http') {
    $x = array_change_key_case(get_headers($Ligne, 1),CASE_LOWER);
    $x = $x['content-length'];
                }
    else { $x = @filesize($lien); }
    if (!$thereturn) { return $x ; }
    elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
    elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
    //modification 
     
    function test_lien($lien){
    //verification de l'éxistance d'un protocole, sinon, utilisation de http:// par defaut
    $lien = (substr($lien, 0, 7) == "http://" or substr($lien, 0, 8) == "https://" or substr($lien, 0, 6) == "ftp://")?$lien:"http://".$lien;
    //test du lien
    $test = @fopen($lien, 'r');
     
    //retour du resultat
    return ($test)? "Le lien suivant est valide : " :  "Le lien suivant est mort : ";
    }
    et le ECHO sur :

    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
    25
    26
    27
    28
    <?php
     
    include "a1.php";
    $filename = '04-1.txt';
     
    if (file_exists($filename)) {
       $fp = fopen($filename,"r"); 
     
    while(!feof($fp)) { // tant que l'on est pas a la fin du fichier 
     
    	// On récupère une ligne
     
    		$lien = fgets($fp,255); 
     
     
    echo test_lien($lien);echo" - Taille : "; echo urlfilesize($lien, 'mb'); Echo" Mo<br>";
     
    // On stocke l'ensemble des lignes dans une variable
    	}
    		$Fichier .= $lien;	 
    	}
    	
    	fclose($fp); // On ferme le fichier
     
    fclose($fp);  
     
    ?>

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Points : 1
    Points
    1
    Par défaut
    En revanche celui là fonctionne :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
        <head>
            <title>Notre première instruction : echo</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        </head>
        <body>
     
    <?php
    $url .= $lien;  // fonctionne
    function urlfilesize($lien,$thereturn) {
    if (substr($lien,0,4)=='http') {
    $x = array_change_key_case(get_headers($lien, 1),CASE_LOWER);
    $x = $x['content-length'];
                }
    else { $x = @filesize($lien); }
    if (!$thereturn) { return $x ; }
    elseif($thereturn == 'mb') { return round($x / (1024*1024),2) ; }
    elseif($thereturn == 'kb') { return round($x / (1024),2) ; }
    }
     
    function affichage_texte ($taille, $couleur, $texte) { 
    echo '<font size = "'.$taille.'" color = "'.$couleur.'">'.$texte.'</font>';  
     } 
     
    function test_lien($lien){
    //verification de l'éxistance d'un protocole, sinon, utilisation de http:// par defaut
    $lien = (substr($lien, 0, 7) == "http://" or substr($lien, 0, 8) == "https://" or substr($lien, 0, 6) == "ftp://")?$lien:"http://".$lien;
    //test du lien
    $test = @fopen($lien, 'r');
    //retour du resultat
    return ($test)? "Le lien suivant est valide : " : "Le lien suivant est mort : ";
    }
    //exemple de lien a tester
     
    echo test_lien('http://localhost/TEST/aksel.avi'); echo "http://localhost/TEST/aksel.avi.AVI"  ;echo" - Taille : "; echo urlfilesize('http://localhost/TEST/aksel.avi', 'mb'); Echo" Mo<br>";
    echo test_lien('http://localhost/TEST/Le.Redeploiement.Militaire.avi');echo "http://localhost/TEST/Le.Redeploiement.Militaire.avi"; ;echo" - Taille : "; echo urlfilesize('http://localhost/TEST/Le.Redeploiement.Militaire.avi', 'mb'); Echo" Mo<br>";
     
    ?>
     
        </body>
    </html>
    Avec comme réponse :

    Le lien suivant est valide : http://localhost/TEST/aksel.avi.AVI - Taille : 296.15 Mo
    Le lien suivant est valide : http://localhost/TEST/Le.Redeploiement.Militaire.avi - Taille : 82.03 Mo

    Mystère du php ?

Discussions similaires

  1. Rajouter titre et nom des colonnes sur fichier texte
    Par pierre24 dans le forum ODS et reporting
    Réponses: 6
    Dernier message: 22/04/2008, 10h44
  2. [VB.NET]Problème de lecture et écriture sur fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 25
    Dernier message: 23/05/2006, 15h30
  3. Réponses: 11
    Dernier message: 17/05/2006, 10h48
  4. problème sur fichier texte
    Par vivelesgnous dans le forum Général Python
    Réponses: 6
    Dernier message: 26/04/2006, 20h08
  5. [VB6][fichier texte]limite des 32 ko
    Par hawk14 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 20/02/2006, 23h45

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