Cancellazione File dal Server.

My Design Community

Nuovo Utente
2 Nov 2015
17
0
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_handle, CURLOPT_URL, 'http://www.cs.....');
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1);
$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:

The-Night

Utente Attivo
18 Ott 2015
59
0
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.
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
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.

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.
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
Lombardia
prova questa soluzione, sperando di aver interpretato bene la necessità
PHP:
<?php 
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'http://www.cs.....');
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1);
$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
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
prova questa soluzione, sperando di aver interpretato bene la necessità
PHP:
<?php 
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, 'http://www.cs.....');
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1);
$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

Ciao, ma le parti nel codice che sono commentate per provare se funziona devo togliere il commento ? A che servono ?
Grazie.
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
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

Ho provato e non funziona ma forse sbaglio qualcosa ...

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

Al posto della / devo mettere qualcosa ?
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
Lombardia
Ho provato e non funziona ma forse sbaglio qualcosa ...

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

Al posto della / devo mettere qualcosa ?
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
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
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

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.
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
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

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_handle, CURLOPT_URL, 'http://www...');
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1);
$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:

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
Lombardia
poi esce scritto il nome corretto almeno 100 volte e poi il seguente errore:

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:

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
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

Però ti voglio dire una cosa ...

Questa soluzione funzionava:

PHP:
<?php  
$curl_handle=curl_init(); 
curl_setopt($curl_handle, CURLOPT_URL, 'http://www.cs.....'); 
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000); 
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1); 
$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:

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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;
 

My Design Community

Nuovo Utente
2 Nov 2015
17
0
0
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;

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.
 

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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_handle, CURLOPT_URL, $url); 
curl_setopt($curl_handle,CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($curl_handle,CURLOPT_MAXREDIRS, 10000); 
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER, 1); 
$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:

marino51

Utente Attivo
28 Feb 2013
3.039
192
63
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:
Discussioni simili
Autore Titolo Forum Risposte Data
F Ripristino windows8 su HD e cancellazione file precedenti! Hardware 35
F problemi con la cancellazione di un file PHP 2
R cancellazione stringa da file PHP 2
S errore cancellazione file Windows e Software 8
MarcoGrazia foreign key cancellazione degli alberi figli di un nodo mancante MySQL 0
P Cancellazione specifici files in una folder php PHP 1
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
spider81man [PHP] Alert Box per confermare Inserimento o Cancellazione dato. PHP 4
G Samsung tab 4 - impostazione e cancellazione codice di accesso Smartphone e tablet 0
M Modifica e/o Cancellazione dati da database MySql PHP 2
seranto Mi rifiutano la cancellazione di un articolo Leggi, Normative e Fisco 5
E messaggio di conferma dopo inserimento/modifica/cancellazione righe db PHP 10
filippino Microsoft Outlook, IMAP e cancellazione posta Posta Elettronica 0
A Prezzo dinamico carrello e messaggio cancellazione Javascript 1
R Modifica e cancellazione dati da MDB Classic ASP 11
F Quali sono i canali previsti dalla legge per richiedere la cancellazione dei dati personali? Leggi, Normative e Fisco 6
N Cancellazione Immagine Utente e Echo conferma cancellazione PHP 2
M Ckeckbox multiple per cancellazione record su db mysql PHP 0
F Cancellazione record PHP 2
P Problema script conferma cancellazione Javascript 2
M Creazione di una pagina web per la cancellazione da una mailing list PHP 13
P problema con cancellazione multipla PHP 7
R Modifica e cancellazione PHP 23
P Cancellazione record PHP 102
maxbossi Cancellazione da forum e rimozione messaggi Comunicazioni dallo Staff 2
G Creazione interfaccia VISUALIZZAZIONE/CANCELLAZIONE dati database PHP 1
B CANCELLAZIONE RECORD IN LOOP NON MI VA! (aiuto) Classic ASP 4
C Cancellazione-Annulla Registrazione Dati appena Inseriti nel Form dall' Utente PHP 13
I Cancellazione sito dal server Webdesign e Grafica 4
A query di cancellazione PHP 6
A Richiesta cancellazione post sul forum Supporto Mr.Webmaster 1
P Problema di cancellazione record su MySql php PHP 0
D cancellazione campo di form Classic ASP 0
SolidSnake4 cancellazione non riuscita PHP 4
G cancellazione messaggi guestbook Supporto Mr.Webmaster 2
D Cancellazione news e relative immagini PHP 1
F cancellazione sito vecchio/pubblicazione sito nuovo HTML e CSS 5
cosov Messaggio conferma per cancellazione record Javascript 1
W Inserimento e cancellazione nodi con XMLDOM XML 1
M cancellazione da Mrwebmaster Tool Supporto Mr.Webmaster 2
D problema cancellazione cartelle PHP 3
M help inserimento e cancellazione record Database 3
Antonio67 Lanciare file shell bash da html HTML e CSS 2
G leggere file txt e stampare con php il contenuto a video PHP 7
L Modifica file upload in ASP Classic ASP 2
Cosina mostrare contenuto da file txt PHP 2
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
M Inviare un file su un server remoto con JavaScript Javascript 0
L Ricezione dei dati su file php da modulo html PHP 6
X unire più file in un pdf Windows e Software 2

Discussioni simili