Newsgroup: it.comp.www.php
Titolo: ftp_put -> ci sono indicazioni particolari?

Per evitare problemi con permessi, gruppi e safe_mode su servr linux, ho 
messo a punto questa funzione per la copia di files
<?php
$conn_id = NULL;
$use_ftp = GetVarFromDB('use_ftp');
function filesystem_copy($from, $to) {
    global $conn_id, $use_ftp;
    $perms   = filesystem_get_perms('file');
    $from    = filesystem_chk_array($from);
    $to      = filesystem_chk_array($to);
    if($use_ftp) {
       if(!is_resource($conn_id)) {
          $conn_id      = ftp_get_conn();
       }
       error_reporting(E_ALL);
       if(function_exists('ftp_put')) {
          foreach($from as $i => $source) {
             if(!ftp_put($conn_id, filesystem_complete_path($to[$i]), 
filesystem_complete_path($source), FTP_BINARY)) {
                return false;	//	FTP moving failed
             } else {
                if(!filesystem_chmod(filesystem_complete_path($to[$i]), 
filesystem_complete_path($perms))) {	//	Chmodding path
                   return false;
                }
             }
          }	//	Closes foreach
       } else {
          $use_ftp = false;	//	PHP is too old, we cannot use ftp 
renaming, so we force standard renaming
       }
    }
    if(!$use_ftp) {
       foreach($from as $i => $source) {
          if(!copy(filesystem_complete_path($source), 
filesystem_complete_path($to[$i]))) {
             return false;
	}
          if(!filesystem_chmod(filesystem_complete_path($to[$i]), 
filesystem_complete_path($perms))) {	//	Chmodding path
             return false;
          }
       }	//	Closes foreach
    }
    return true;
}
dove le path restituite dalla funzione fylesystem_complete_path($path) 
sono del tipo:
"ftp_home_dir/percorso/al/file.ext";
la funzione ftp_get_conn() si occupa di aprire la connessione e di 
restituire l'id della connessione.
All'interno di essa inoltre uso la direttiva
register_shutdown_function('ftp_shutdown');
che mi assicura la chiusura corretta della connessione (nel caso esista 
) al termine delle operazioni mediante la funzione ftp_shutdown.
Ho utilizzato la funzione ftp_put perchè la funzione ftp_rename sposta 
un file da una posizione ad un'altra, mentre a me serve che il file 
venga solo "copiato" (cioè che l'originale rimanga nella sua posizione 
di partenza).
Sulla cartella sulla quale opero ho tutti ipermessi possibili e 
immaginabili impostati tramite server (=> RWADELCRI), e sebbene su win 
non abbia senso il chmod, lo script comunque lo esegue correttamente 
sulla dir di destinazione prima di passare al tentativo di copia.
Ma non c'è verso, non mi funziona;
anche con error_reporting(E_ALL); non mi viene restituito nessun errore 
e/o warning :(
Ma lo script si "blocca qui":
if(!ftp_put($conn_id,filesystem_complete_path($to[$i]),filesystem_complete_path($source),FTP_BINARY)){
    return false;	//	FTP moving failed
}
semplicemente "uscendo".
Che altre possibilità ho?
La mia configurazione:
win2k
php: 4.3.10
apache: 1.3.33
ftp_server: Serv-U 5.0
Grazie.

 }
Ok, intanto ringrazio chiunque avesse speso del tempo prezioso a leggere 
il mio post pur non essendo stato in grado di aiutarmi.
Ho trovato (almeno credo, dal momento che ogni cosa funziona ora) la 
soluzione:
la chiamata alla funzione di per se era sintatticamente corretta
ftp_put($conn_id,filesystem_complete_path($to[$i]),filesystem_complete_path($source),FTP_BINARY)
il problema stava nei percorsi che passavo.
la funzione è la seguente
ftp_put($id_conn, $dest_file, $source_file, FTP_MODE)
FTP_MODE = FTP_BINARY o FTP_ASCII
bene, il primo path, quello di destinazione, lo passavo correttamente, e 
cioè:
www/sito/dl/cat/includes/.htaccess
relativo alla home ftp.
il secondo path invece lo passavo in maniera errata.
Infatti passavo un percorso del tipo
www/sito/moduli/dl/includes/std.htaccess
relativo alla home ftp, mentre ora passo un percorso relativo alla home 
http:
moduli/dl/includes/std.htaccess
probabilmente il problema che ho avuto è abbastanza banale, ma avendoci 
sbattuto parecchio la testa chissà, magari posso far risparmiare del 
tempo a qualcuno.
Ciao