PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 11-09-2017 21:31:13

ecoll
Membre
Inscription : 02-03-2017
Messages : 3

Script qui change le résultat après l'affichage

Bonsoir à tous

J'ai un gros souci avec un script que je suis en train de faire

le but de celui ci est de télécharger des fichiers depuis mon dédié vers mon auxiliaire qui est à la maison.

vous me direz:

    - utilise le SSH, non la ligne de commande ça va 5 min surtout quand les fichiers ont des noms à ralonge

    - utilise un client FTP, je dis oui mais perte de temps car une troisième machine est nécessaire, donc téléchargement et après upload

bref....

j'ai créé une class pour toute la partie FTP

dedant il y a cette fonction

    function rawlist($path)
  {
    $list = ftp_rawlist($this->ftpid, $path);
   
    foreach($list as $value)
    {
      preg_match_all("/([a-z]).{9} +[0-9]{1,2} .*? +.*? +([0-9]+) ([A-Za-z]{3} +[0-9]{1,2} [0-9]{2}:[0-9]{2}) (.*)/s", $value, $search);
      if($search[1][0] == "d")
      {
        $output['directory'][] = array("path" => $path, "name" => $search[4][0]);
      }
      else
      {
        $output['file'][] = array("path" => $path, "name" => $search[4][0], "size" => $search[2][0], "modified" => $search[3][0]);
      }
    }
    @usort($output['directory'], "self::cmp");
    $_SESSION['faitchier'] = $output;

    return $output;
  }

jusque là pas de problème, elle fait très bien son job

la page d'index (ou est appelé cette fonction), m'affiche la liste des fichiers et dossiers.

chaque dossier il y a un lien pour visualiser l’intérieur. chaque fichier un lien vers telecharger.php?id=$id_du_fichier

au début j'avais mis les info que j'avais besoin en get dans l'url mais très vite rattrapé par la restriction de 255 caractères sad

donc j'ai, décidé de passer le tableau par la session, d'où le $_SESSION['tmp'] = $output dans le code.

comme ça ne fonctionnait pas j'ai mis un print_r($_SESSION) dans les deux pages.

Sur l'index par de problème je vois bien mon tableau avec tous les fichiers et dossiers.

Sur telecharger.php là par contre je me retrouve avec le tableau de la racine du FTP

a savoir que l'arborescence du FTP est comme ceci

Dossier1
|   Dossier1A
|   Dossier1B
|   Fichier1a
|   Fichier1b
Dossier2
|   Fichier2a
ect...

sur mon index, si je fais $ftp->rawlist('/');, ca doit me donner Dossier1 et Dossier2
si je fais $ftp->rawlist('/Dossier1');, je dois voir Dossier1A, Dossier1B, Fichier1a, Fichier1b

donc l'index j'ai array(Dossier1A, Dossier1B, Fichier1a, Fichier1b)

et sur l'autre page j'ai array(Dossier1, Dossier2)

là je ne comprends pas de trop

Au début je pensais à un résiduel du tableau étant donné que je passe par la racine au début

donc j'ai rajouté ceci au début de ma fonction

    session_unset();
    $output = array();

afin de supprimé $_SESSION avant chaque utilisation

mais pareil.

Je me suis dit que peut etre je me suis trompé dans la session.

Alors je me suis dit que j'allais mettre mon tableau dans un fichier texte

j'ai donc mis ceci à la place de $_SESSION['tmp'] = $output

    $file = fopen('path/path.txt', 'w+');
    fwrite ($file, json_encode($output));
    fclose($file);

Et bien... même résultat, je me retrouve avec un fichier txt d'1ko contenant la racine.

Donc à ce moment là je sais que mon code est bon, mais quelque chose le fait bugger.

Mais quoi.... o_O

Après pas mal de temps à essayer ceci ou celà, j'ai trouvé mais je ne l'explique pas.

dès que j’arrête d'afficher à l'écran le résultat de la fonction je me retrouve avec un txt de 9ko avec toute la structure.

là j'ai juste mis

for($i=0; $i<$nb_file; $i++)
{
    echo $gen['file'][$i]['name']."<br>\n";
}

et ça fonctionne.

J'ai l'impression que c'est dès que je met du HTML

Ahh aussi

Avant d'essayer an mettant des echo "code HTML...", je travaillait avec un moteur de template que j'ai fait en m'inspirant plus que beaucoup à celui de phpbb, que ce soit avec le template ou le html en echo dans le php, j'ai le meme problème.

Quelqu'un aurait il une idée ??

Merci à tous


Hors ligne

Pied de page des forums