Cancellazione File dal Server.

Discussione in 'PHP' iniziata da My Design Community, 2 Novembre 2015.

  1. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Salve, complimenti per il Forum ... davvero molto utile ed interessante.

    Non sono molto pratico con il linguaggio PHP e dovrei inserire in un file PHP (di seguito allegato) una funzione che mi permette di cancellare il file più vecchio in una cartella specifica nel Server.

    FILE PHP ESISTENTE

    PHP:
    <?php
    $curl_handle
    =curl_init();
    curl_setopt($curl_handleCURLOPT_URL'http://www.cs.....');
    curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATIONTRUE);
    curl_setopt($curl_handle,CURLOPT_MAXREDIRS10000);
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER1);
    $buffer curl_exec($curl_handle);
    curl_close($curl_handle);
    if (empty(
    $buffer))
    echo 
    "Spiacente ma qualcosa non ha funzionato.";
    else
    echo 
    $buffer;
    ?>
    Grazie per il vostro aiuto.

    :byebye:
     
    Ultima modifica di un moderatore: 6 Novembre 2015
  2. The-Night

    The-Night Utente Attivo

    Registrato:
    18 Ottobre 2015
    Messaggi:
    59
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    ciao, io uso:

    PHP:
    <?php
    $path 
    "UserData/";
    if (
    $handle opendir($path)) {
      while (
    false !== ($file readdir($handle))) {
        if ((
    time()-filectime($path.$file)) > 2*24*60*60) {
          
    $per "$path$file";
          
    unlink($per);
        }
      }
    }
    ?>
    Dove 2*24*60*60 il 2 in grassetto è il numero di giorni dopo il quale il codice elimina i file.
     
  3. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Il file che dovrei cancellare ha sempre la stessa estensione ma il nome non è mai lo stesso.
    Inoltre, dovrebbe funzionare che si attiva se tutto ha funzionato bene quindi integrandolo al codice che ho scritto nel post precedente se e solo se l'esito è positivo.

    Quando scrivi 2*24*60*60 ti riferisci ai giorni, quindi ad esempio basterebbe solo scrivere così ?

    if ((time()-filectime($path.$file)) > 30) {

    Grazie.
     
  4. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    prova questa soluzione, sperando di aver interpretato bene la necessità
    PHP:
    <?php 
    $curl_handle
    =curl_init();
    curl_setopt($curl_handleCURLOPT_URL'http://www.cs.....');
    curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATIONTRUE);
    curl_setopt($curl_handle,CURLOPT_MAXREDIRS10000);
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER1);
    $buffer curl_exec($curl_handle);
    curl_close($curl_handle);
    if (empty(
    $buffer))
      echo 
    "Spiacente ma qualcosa non ha funzionato.";
    else
      {
      
    DeleteOldestFile();
      echo 
    $buffer;
    }

    function 
    DeleteOldestFile() {

      
    $directory "C:/Web_Sites/__Test/PHP/SolarPower/js"// <- inserisci path senza barra finale
      
    $FileExt ".txt"// <- inserisci l'estensione del file o comunque la parte finale da controllare

      
    if (is_dir($directory))
      { 
        if (
    $directory_handle opendir($directory))
        { 
          while ((
    $FileName readdir($directory_handle)) !== false)
          { 
            
    $FileRef $directory."/".$FileName;

            if ( !
    is_dir($FileRef) )
            { 
              
    $FileCtime filectime($FileRef);

              
    // echo $FileName."<br />".$FileCtime."<br />";

              
    if ( substr($FileName, -strlen($FileExt)) == $FileExt and ( empty($OldestFile) or $FileCtime $OldestCtime ) )
              { 
                
    $OldestFile  $FileRef;
                
    $OldestCtime $FileCtime;
              }
            }
          }
          
    closedir($directory_handle);

          if ( empty(
    $OldestFile) ) return false;
          else
          { 
            echo 
    $OldestFile."<br />";
    //      unlink($OldestFile); 
            
    return $OldestFile;
          } 
        } 
      } 
    }
    ?>
    ps ho commentato unlink giusto perché tu possa fare delle prove in sicurezza
     
  5. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ciao, ma le parti nel codice che sono commentate per provare se funziona devo togliere il commento ? A che servono ?
    Grazie.
     
  6. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    no, ho lasciato l'echo nella parte centrale, nel caso si vogliano vedere i valori che vengono presi in considerazione,
    ma non è necessaria e quindi è commentata

    vanno modificate, la directory e l'estensione dei file, che mi sembrano delle costanti
    l'estensione viene usata per controllo

    dopo le prove, unlink deve essere resa operativa e commentata l'echo che la precede

    non sapendo se lo script originale è attivato da una chiamata Ajax, ho evitato di mettere echo che potrebbero disturbare il funzionamento
     
  7. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ho provato e non funziona ma forse sbaglio qualcosa ...

    $FileRef = $directory."/".$FileName;

    Al posto della / devo mettere qualcosa ?
     
  8. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    no assolutamente no,

    devi modificare
    PHP:
      $directory "C:/Web_Sites/__Test/PHP/SolarPower/js"// <- inserisci path senza barra finale 
      
    $FileExt ".txt"// <- inserisci l'estensione del file o comunque la parte finale da controllare 
    avendo cura di non mettere la barra alla fine della $directory
     
  9. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Il file funziona però c'è un problema ... non cancella il più vecchio ma tutti i files con quella estensione.
    Inoltre, la prima parte di codice non viene eseguita e riporta errori interni, tutto questo accade dopo che " unlink deve essere resa operativa e commentata l'echo che la precede " mentre prima di effettuare questa operazione usciva scritto il percorso, il file e 200 OK e la prima parte del file funzionava.
     
  10. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    per sicurezza sostituisci le righe con,
    PHP:
          if ( empty($OldestFile) ) return; 
          else 
          {  
            echo 
    $OldestFile."<br />"
    //      unlink($OldestFile);  
            
    return; 
    evitiamo di restituire valori con "return"
    riprova ancora con echo e lasciando commentato unlink
    se non esce il nome del file corretto riposta il tuo script completo
    ciao
    Marino
     
  11. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    La prima parte dello script non funziona ... poi esce scritto il nome corretto almeno 100 volte e poi il seguente errore:

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.

    Questo è lo script attuale:

    PHP:
    <?php 
    $curl_handle
    =curl_init();
    curl_setopt($curl_handleCURLOPT_URL'http://www...');
    curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATIONTRUE);
    curl_setopt($curl_handle,CURLOPT_MAXREDIRS10000);
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER1);
    $buffer curl_exec($curl_handle);
    curl_close($curl_handle);
    if (empty(
    $buffer))
      echo 
    "Spiacente ma qualcosa non ha funzionato.";
    else
      {
      
    DeleteOldestFile();
      echo 
    $buffer;
    }

    function 
    DeleteOldestFile() {

      
    $directory "/web/..."// <- inserisci path senza barra finale
      
    $FileExt ".jpa"// <- inserisci l'estensione del file o comunque la parte finale da controllare

      
    if (is_dir($directory))
      { 
        if (
    $directory_handle opendir($directory))
        { 
          while ((
    $FileName readdir($directory_handle)) !== false)
          { 
            
    $FileRef $directory."/".$FileName;

            if ( !
    is_dir($FileRef) )
            { 
              
    $FileCtime filectime($FileRef);

              
    // echo $FileName."<br />".$FileCtime."<br />";

              
    if ( substr($FileName, -strlen($FileExt)) == $FileExt and ( empty($OldestFile) or $FileCtime $OldestCtime ) )
              { 
                
    $OldestFile  $FileRef;
                
    $OldestCtime $FileCtime;
              }
            }
          }
          
    closedir($directory_handle);

          if ( empty(
    $OldestFile) ) return;
          else
          {
            echo 
    $OldestFile."<br />";
    //      unlink($OldestFile);
            
    return;
          }
        }
      }
    }
    ?>
     
    Ultima modifica di un moderatore: 6 Novembre 2015
  12. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Niente ... Provato e riprovato genera sempre lo stesso errore.

    :crying:
     
  13. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Raga ma nessuna risposta ??

    :crying:
     
  14. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    il comportamento dello script, che segnali, non dipende certamente dalla cancellazione del file,
    se esce almeno 100 volte il nome del file, visto che non lo cancelliamo, vuol dire che lo script viene eseguito almeno 100 volte

    quindi ti rivolgo la domanda, cosa fare ?

    ps, se avessimo lasciato la cancellazione ti avrebbe cancellato almeno 100 files diversi
    come hai scritto in un post precedente, "ha cancellato tutti i files con la terminazione ..."

    forse la logica del processo è diversa rispetto alla variazione che hai chiesto di introdurre
     
    Ultima modifica: 5 Novembre 2015
  15. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Però ti voglio dire una cosa ...

    Questa soluzione funzionava:

    PHP:
    <?php  
    $curl_handle
    =curl_init(); 
    curl_setopt($curl_handleCURLOPT_URL'http://www.cs.....'); 
    curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATIONTRUE); 
    curl_setopt($curl_handle,CURLOPT_MAXREDIRS10000); 
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER1); 
    $buffer curl_exec($curl_handle); 
    curl_close($curl_handle); 
    if (empty(
    $buffer)) 
      echo 
    "Spiacente ma qualcosa non ha funzionato."
    else 
      { 
      
    DeleteOldestFile(); 
      echo 
    $buffer


    function 
    DeleteOldestFile() { 

      
    $directory "C:/Web_Sites/__Test/PHP/SolarPower/js"// <- inserisci path senza barra finale
      
    $FileExt ".txt"// <- inserisci l'estensione del file o comunque la parte finale da controllare

      
    if (is_dir($directory)) 
      {  
        if (
    $directory_handle opendir($directory)) 
        {  
          while ((
    $FileName readdir($directory_handle)) !== false
          {  
            
    $FileRef $directory."/".$FileName

            if ( !
    is_dir($FileRef) ) 
            {  
              
    $FileCtime filectime($FileRef); 

              
    // echo $FileName."<br />".$FileCtime."<br />"; 

              
    if ( substr($FileName, -strlen($FileExt)) == $FileExt and ( empty($OldestFile) or $FileCtime $OldestCtime ) )
              {  
                
    $OldestFile  $FileRef
                
    $OldestCtime $FileCtime
              } 
            } 
          } 
          
    closedir($directory_handle); 

          if ( empty(
    $OldestFile) ) return false
          else 
          {  
            echo 
    $OldestFile."<br />"
    //      unlink($OldestFile);  
            
    return $OldestFile
          }  
        }  
      }  

    ?>
    Ma se togliamo il commento su unlink e lo inseriamo su echo precedente non funziona più.
     
    Ultima modifica di un moderatore: 6 Novembre 2015
  16. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    cosa succede commentando entrambi ?
    PHP:
    // echo $OldestFile."<br />"; 
     // unlink($OldestFile); 
    scusa la banalità ma, prova per cortesia

    meglio sarebbe provare con,
    PHP:
    if ( empty($OldestFile) ) return; 
    else 

    // echo $OldestFile."<br />"; 
    // unlink($OldestFile); 
    return; 
     
  17. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Ho provato, lo script nella prima parte non parte e poi genera a video questo errore:

    Internal Server Error

    The server encountered an internal error or misconfiguration and was unable to complete your request.

    Please contact the server administrator to inform them of the time this error occurred, and the actions you performed just before this error.

    More information about this error may be available in the server error log.
     
  18. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    ho deciso di provare lo script completo, compresa la parte di lettura dei dati da remoto (curl)
    PHP:
    <?php

    require_once 'Config_DB.php';

    $inverterID    '0001';

    $sql        "select Apikey, SystemId from PVoutput_ident where inverterID='".$inverterID."'";
    $data        $db->queryS($sql);
    $Apikey        $data[0][0];
    $SystemId    $data[0][1];

    $url="http://pvoutput.org/service/r2/getstatistic.jsp?sid=".$SystemId."&key=".$Apikey."&df=20151105&dt=20151105";

    $curl_handle=curl_init();
    curl_setopt($curl_handleCURLOPT_URL$url); 
    curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATIONTRUE); 
    curl_setopt($curl_handle,CURLOPT_MAXREDIRS10000); 
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER1); 
    $buffer curl_exec($curl_handle); 
    curl_close($curl_handle); 
    if (empty(
    $buffer)) 
      echo 
    "Spiacente ma qualcosa non ha funzionato."
    else 
      { 
      
    DeleteOldestFile(); 
      
    var_dump($buffer); 


    function 
    DeleteOldestFile() { 

      
    $directory "/web/files_jpa"// <- inserisci path senza barra finale 
      
    $FileExt ".jpa"// <- inserisci l'estensione del file o comunque la parte finale da controllare 

      
    if (is_dir($directory)) 
      {  
        if (
    $directory_handle opendir($directory)) 
        {  
          while ((
    $FileName readdir($directory_handle)) !== false
          {  
            
    $FileRef $directory."/".$FileName

            if ( !
    is_dir($FileRef) ) 
            {  
              
    $FileCtime filectime($FileRef); 

              
    // echo $FileName."<br />".$FileCtime."<br />"; 

              
    if ( substr($FileName, -strlen($FileExt)) == $FileExt and ( empty($OldestFile) or $FileCtime $OldestCtime ) ) 
              {  
                
    $OldestFile  $FileRef
                
    $OldestCtime $FileCtime
              } 
            } 
          } 
          
    closedir($directory_handle); 

          if ( empty(
    $OldestFile) ) return; 
          else 
          { 
            echo 
    $OldestFile."<br />"
    //      unlink($OldestFile); 
            
    return; 
          } 
        } 
      } 

    ?>

    devo estrarre i dati presenti sul sito pvoutput.org per il giorno 5/11/2015

    Curl_1.PNG


    ho creato il folder dove parcheggiare i dati ".jpa"

    Curl_2.PNG


    eseguo lo script con attivo "echo" e commentato "unlink"
    come vedi, sceglie il file più vecchio e visualizza con "var_dump" il contenuto di "$buffer" ricevuto dal sito remoto


    Curl_3.PNG


    adesso commento "echo" e attivo "unlink"

    Curl_4.PNG


    rieseguo lo script, che mi visualizza solo i dati ricevuti

    Curl_5.PNG

    nel folder dei file (continua)
     
    Ultima modifica: 6 Novembre 2015
  19. marino51

    marino51 Utente Attivo

    Registrato:
    28 Febbraio 2013
    Messaggi:
    2.551
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Occupazione:
    free lance
    Località:
    Lombardia
    Curl_6.PNG

    quindi l'errore che ottieni non dipende da queste modifiche ma da altro ...
    non solo, il processo di scelta del file e cancellazione, funziona correttamente
     
    Ultima modifica: 6 Novembre 2015
  20. My Design Community

    My Design Community Nuovo Utente

    Registrato:
    2 Novembre 2015
    Messaggi:
    17
    Mi Piace Ricevuti:
    0
    Punteggio:
    0
    Puoi postare lo script completo che hai utilizzato, mi sembra diverso da quello iniziale.
    Secondo te dipende da Aruba o da che altro ?
    Anche su Register da problemi.
     
    Ultima modifica: 6 Novembre 2015
Sto caricando...

Condividi questa Pagina