problème avec ftp_get et ftp_fget

maïa
Invité n'ayant pas de compte PHPfrance

04 févr. 2007, 01:12

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

ViPHP
ViPHP | 1961 Messages

04 févr. 2007, 02:04

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.
Deux choses sont infinies, l'Univers et la sottise humaine!!
Mais je ne suis pas sur de ce que j'affirme au sujet de l'Univers.

A. Einstein

maïa
Invité n'ayant pas de compte PHPfrance

04 févr. 2007, 10:23

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";  
         

Eléphant du PHP | 140 Messages

05 févr. 2007, 10:28

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.

maïa
Invité n'ayant pas de compte PHPfrance

05 févr. 2007, 10:44

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