Newsgroup: it.comp.www.php
Titolo: Curl - Trasferimento file su server e cancellazione in locale

Salve,
sto utlizzando le funzioni curl per trasferire dei semplici file di testo 
dal server della mia rete locale, ad un server web.
La procedura di trasferimento avviene senza problemi.
Tuttavia dopo aver chiuso la sessione curl, ho la necessit� di cancellare i 
file che ho caricato.
Li metto dentro un array, e faccio un unlink ad ogni file.
Quello che non riesco a capire � perch� mi cancella correttamente tutti i 
file tranne l'ultimo dell'array
Posto un po' di codice
<?php
 error_reporting(E_ALL);
 $ftpserver = 'myserver';
 $ftpuser   = 'user';
 $ftppass   = 'pass';
 $arr_file = array();
 $del_file = array();
 $source_path = 'C:/mylocaldir/';
 $ftppath = '/public_html/temp';
 $handle = opendir($source_path);
 while (False !== ($file = readdir($handle))) {
  if ($file != "." && $file != "..") {
   $arr_file[] = strtoupper($file);
  }
 }
 closedir($handle);
 $ch = curl_init();
 for($i=0; $i<count($arr_file); $i++) {
 $fp = fopen($source_path.$arr_file[$i], "r");
 $remoteurl = 
'ftp://'.$ftpuser.':'.$ftppass.'@'.$ftpserver.$ftppath.'/'.$arr_file[$i];
 curl_setopt($ch, CURLOPT_URL, $remoteurl);
 curl_setopt($ch, CURLOPT_UPLOAD, 1);
 curl_setopt($ch, CURLOPT_INFILE, $fp);
 curl_setopt($ch, CURLOPT_TRANSFERTEXT, true);
 curl_setopt($ch, CURLOPT_INFILESIZE, filesize($source_path.$arr_file[$i]));
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 fclose($fp);
  $error = curl_exec($ch);
  $error_msg = curl_error($ch);
  $errorNumber = curl_errno($ch);
   if($errorNumber>0) {
   echo $arr_file[$i].': NO'.'CURL error:'.$errorMsg.' - 
n.'.$errorNumber."'\n";
   } else {
   echo $arr_file[$i].': OK'."\n";
   $del_file[] = $source_path.$arr_file[$i];
   }
 }
 curl_close($ch);
 for($i=0; $i<count($del_file); $i++) {
  unlink($del_file[$i]);
 }
?>
mi cancella tutti i file, ma l'ultimo file dell'array non gli piace e 
ottengo il seguente errore:
Warning: unlink(C:/mylocaldir/nomefile.ext) [function.unlink]: Permission 
denied
Vi confesso che non ne capisco la motivazione.
Qualche suggerimento?
Cordiali Saluti

 Quello che non riesco a capire è perchè mi cancella correttamente tutti i 


PS: forse anche nella funzione di sopra si perde l'utimo file!?!
HiTeck ha scritto:


 
non vorrei azzardare...ma fa su tutti cosï¿œ che all'ultimo ha un 
Permission denied o solo su quel file specifico? Chiedo perchï¿œ la 
motivazione sembra abbastanza chiara...

 abbastanza chiara...
Permission denied lo da sempre e solo sull'ultimo file dell'array, 
indipendentamente dal numero di file e dal nome dei file.
Dopo aver chiuso la sessione curl, i file li cancella regolarmente tranne 
l'ultimo.
Puoi provare lo script ed accertartene di persona.
Vi confesso che non ne capisco ancora la motivazione.
Cordiali Saluti

 ha scritto nel messaggio 
news:4b178208$0$710$5fc...@news.tiscali.it...
Pare semplice:
for($i=0; $i<=count($del_file); $i++) {
   unlink($del_file[$i]);
  }
Poi personalemnte preferisco mettere fuori dai cicli elementi tipo
count()... ad ogni ciclo riconta, se l'array � piccolo poco male, ma per
dati importanti � una perdita di tempo e memoria!
 Bye!
 Anto
Salve,
I file sono al massimo cinque, comunqe di solito metto count() fuori dal 
ciclo.
Ma non � questo il problema.
Dopo aver chiuso la sessione curl, i file li cancella regolarmente tranne
l'ultimo dell'array, indipendentamente dal numero di file e dal nome dei 
file.
Puoi provare lo script ed accertartene di persona.


 Cordiali Saluti
prima di iniziare il ciclo deigli unlink, metti
$fp=NULL;
in pratica
......
curl_close($ch);
  $fp=NULL;   //////  <----AGGIUNGI QUESTO


  }
Grazie.

 
de nada...poi qualcuno mi spiega perchï¿œ sembra che si debba proprio 
distruggere la risorsa....

 distruggere la risorsa....
... � quello che mi chiedo pure io?
Parrebbe che il semplice fclose($fp) non sia sufficiente.
Cordiali Saluti