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 :

Echec enchainement ftp_get() / ftp_delete() sur serveur Windows


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 103
    Points : 48
    Points
    48
    Par défaut Echec enchainement ftp_get() / ftp_delete() sur serveur Windows
    Bonjour,

    j'ai un gros souci depuis que j'ai changé d'hébergeur. J'ai un bout de code chargé de récupérer des fichiers sur un serveur FTP puis de les supprimer si ils ont bien été récupérés. Ce code fonctionnait sans aucun problème chez mon hébergeur précédent mais là il ne fonctionne plus chez le nouvel hébergeur.

    Je me suis donc renseigné auprès de lui...il m'a dit qu'il s'agit d'un serveur Windows ce qui m'a mis sur la piste des handles de fichier qui sont bloqués et j'ai trouvé une sorte de solution détestable dans laquelle je télécharge tous les fichiers puis j'attend 30 secondes avant de les supprimer. Ça fonctionne, certes, mais c'est très irritant d'attendre 30 secondes pour récupérer deux ou trois fichier de 4 ko...

    Voici le code pour illustrer mes propos :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
            $ar_files = ftp_nlist($conn_id, $ftp_logs_dir);
                                
            // makes sure there are files
            if (is_array($ar_files))
            { 
                // for each file
                for ($i=0;$i<sizeof($ar_files);$i++)
                {
                    $st_file = basename($ar_files[$i]);
                    if($st_file == '.' || $st_file == '..') continue;
                    // check this is NOT a directory
                    if (ftp_size($conn_id, $ftp_logs_dir.'/'.$st_file) != -1)
                    {
                        $fileparts = explode(".", $st_file);
                        if(count($fileparts)==2&&$fileparts[1]=="log"&&ereg("^PlayerJoin", $fileparts[0])==true)
                        {
                            $filePath = $ftp_logs_dir.'/'.$st_file;
                            if(ftp_get($conn_id, $current_dir.$st_file, $filePath, FTP_BINARY))
                            {
                                $filestodelete[] = $st_file;
                            } 
                        }
                    }
                }
                
                if ($filestodelete && is_array($filestodelete) && count($filestodelete)>0)
                {
                    sleep(30);
                    for($i=0 ; $i<count($filestodelete) ; $i++)
                    {
                        $st_file = $filestodelete[$i];
                        $filePath = $ftp_logs_dir.'/'.$st_file;
                        if(ftp_delete($conn_id, $filePath))
                        {
                           echo $st_file."<br/>";
                            
                            flush();
                        }
                        else
                        {
                            @ftp_close($conn_id);
                            echo "Error : cannot delete files from FTP server...";
                            flush();
                            
                            // remove all files we cannot delete
                            for($j=$i ; $j<count($filestodelete) ; $j++)
                            {
                                $st_file = $filestodelete[$j];
                                unlink($current_dir.$st_file);
                            }
                            exit;
                        }
                    }
                }
            }
    Y'a-t-il quelqu'un qui aurait une meilleure idée ? Ai-je fait fausse route ?

  2. #2
    Membre du Club Avatar de spin0us
    Profil pro
    Inscrit en
    Février 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    T'as tenté de te déco/reco à chaque fichier ?
    Pas sur que ça aille mieux mais qui sait.
    Membre actif de la Pouy@geTe@m.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/08/2006, 12h31
  2. [RESEAU] Authentification client linux sur serveur windows
    Par rvfranck dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 19/06/2006, 18h57
  3. Authentification client linux sur serveur windows
    Par rvfranck dans le forum Réseau
    Réponses: 4
    Dernier message: 19/06/2006, 07h27
  4. Réponses: 4
    Dernier message: 29/03/2006, 09h54
  5. Oracle 9I sur serveur Windows 2000 : pb http server
    Par Frédérique Ostré dans le forum Oracle
    Réponses: 1
    Dernier message: 23/10/2005, 12h28

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