Page 1 sur 1

problème avec ftp_get et ftp_fget

Posté : 04 févr. 2007, 01:12
par maïa
bonjour à vous,
j'ai posté ce message dans la liste des débutants, mais je n'ai pas eu de réponse. j'essaie ici

j'ai à ma disposition un fichier texte .aff (je ne connaissais pas)
je veux récupérer le contenu et le copier sur un autre serveur

la connexion se passe bien le transfert plante à 90%

je vous joint les fonctions
la premières fonction insère les éléments dans une base de données
la seconde fait un transfert d'images
la troisième récupère et liste les lignes du fichier texte

function insere_biens($r) 
{ 
     
    $origine    = array("²","é","è","à","'"); 
    $code        = array("²","é","è","à","\'"); 
    $d            = utf8_encode($r[9]); 
    $d            = str_replace($origine,$code,$d); 
    $idc         = connect_bd(); 
    $req         = "INSERT INTO cbi_biens "; 
    $req        .= "(type_transaction,type_biens,reference,numero_mandat,cp,ville,prix_mandat_fr,prix_mandat_euro,secteur,"; 
    $req        .= "nombre_pieces,nombre_chambres,surface_habitable,surface_terrain,niveaux,etage,annee_construction,"; 
    $req        .= "jardin,digicode,balcon,terrasse,cave,ascenceur,garage,parking,"; 
    $req        .= "chauffage,nombre_bains,nombre_wc,orientation,date_modification,description,exclusivite,stationnement) "; 
    $req        .= "VALUES ('$r[0]','$r[1]','$r[2]','$r[3]','$r[4]','$r[5]',$r[6],$r[7],'$r[8]',"; 
    $req        .= "'$r[10]','$r[11]','$r[12]','$r[13]','$r[14]','$r[15]','$r[16]',"; 
    $req        .= "'$r[17]','$r[18]','$r[20]','$r[21]','$r[22]','$r[23]','$r[24]','$r[25]',"; 
    $req        .= "'$r[26]','$r[27]','$r[28]','$r[29]','$r[30]','$d','$r[33]','$r[35]')"; 
    $w            = "<div class=\"texte_ok\">" . $r[0] . " - " . $r[1] . " - " . $r[2] . " - " . $r[3] . " - " . $r[4] . " - " . $r[5] . "</div>"; 
    $r             = query($req); 
    return $w; 
} 



function dowload_images() 
{ 
    $r = connect_ftp(); 
    ftp_chdir($r, "Photos"); 
       $liste = ftp_nlist($r,""); 
       $n = count($liste); 
       $liste_images = ""; 
        
       for($i=0; $i<$n; $i++) 
       { 
           $nom_local = substr($liste[$i],15); 
           $lien_local = "../images/DATA/".$nom_local; 
           $file_open = fopen($lien_local,"wb"); 
           if(ftp_fget($r, $file_open, $liste[$i], FTP_BINARY)){ $liste_images .= "<div class=\"texte_ok\">- " . $liste[$i] . "</div>";} 
           else{ $liste_images .= "<div class=\"texte_no\">- " . $liste[$i] . " -</div>";} 
       } 
       return $liste_images; 
} 


function ftp_biens() 
{ 
       $w = ""; 
       $r = connect_ftp(); 
       echo "get pas encore"; 
       if(ftp_get($r,"liste_biens.aff","Perso/cbi78-p.aff",FTP_BINARY)) 
       { 
           echo "get ok"; 
           $liste_biens = file ("http://idc.lautre...fichier.aff"); 
        $biens = count($liste_biens); 
           supprime_biens(); 
            
          for($i=0; $i<$biens; $i++) 
        { 
            $bien = $liste_biens[$i]; 
            $detail_bien = explode(";", $bien);         
            $w .= insere_biens($detail_bien); 
        } 
       } 
       else $w = "<div class=\"texte_ok\">&Eacute;chec. Veuillez essayer plus tard.</div>"; 
        
    return $w; 
    ftp_close($r); 
} 
par avance merci,
et désolé si j'enfreinds quelques règles
je m'efforcerai d'y remédier

Posté : 04 févr. 2007, 02:04
par Ajoloca
Bonsoir,

As-tu pensé au temps nécessaire pour le déroulement de toutes les opérations ???

N'oublie pas que tu as une directive qui limite le temps d'exécution d'un script.
Par défaut cette valeur est de 30 secondes, si le transfert est en cours et que cette limite est atteinte, le transfert s'arrête avec le script.

Posté : 04 févr. 2007, 10:23
par maïa
salut
j'ai fais le test suivant, cette action ne pas prendre plus de 30 secondes à chaque exécution si ?
j'ai essayé en attribuant 90 comme valeur au set_time_limit()...
rien ne passe le ftp_get ou ftp_fget qui lui répond plus rapidement en affichant uniquement le ; echo "get pas encore"
celapeut il venir du FTP_BINARY qui pour du texte devrait être FTP_ASCII ? cela fonctionnae à certaine heure irrégulièrement et pas dutout à d'autres, cela peut il venir de la config du serveur ?
merci à bientôt

ftp_biens()  
{  
       $w = "";  
       $r = connect_ftp();  
       echo "get pas encore";  
       if(ftp_get($r,"liste_biens.aff","Perso/cbi78-p.aff",FTP_BINARY))  
       {  
           echo "get ok";  
         

Posté : 05 févr. 2007, 10:28
par Vorkosigan
j'ai essayé en attribuant 90 comme valeur au set_time_limit()...
En fait, a ma connaissance, meme si tu mets 90 comme temps d'execution maxi le parametre serveur (qui est peut-etre 30) l'emporte.

Posté : 05 févr. 2007, 10:44
par maïa
salut,
je crois être en dessous des 30 secondes pour l'exécution.

en cherchant j'ai lu que les fonctions ftp_get et ftp_fget étaient "instables", qu'est-ce sa veut dire, est-ce vrai ?

autre piste :
qu'il était préférable de déposer un script sur le serveur distant et de l'exécuter. mais je n'ai pas d'accès http donc comment exécuter cette fonction : ftp_exec ?
peut-on utiliser ftp_exec(get); quelle différence avec ftp_get() ?
merci je continue