come riempire in automatico una cartella di file tutti uguali
di Antonella Sorbini 2 agosto 2019
Può capitare di avere necessità di riempire in modo automatico una cartella con tanti file testo con all'interno sempre la stessa stringa.
Perchè mai dover fare una cosa del genere? Succede che in corso d'opera si decida di aggiungere nel codice di una pagina web l'inclusione di testi dopo solo che si è già riempito un database con parecchie righe. Se seguo la struttura di database illustrata nel pagina "Siti in php con database piccoli e più file di testo", mi trovo ad avere necessità di una cartella con tanti file con nome del tipo 'nomeFile1.txt', 'nomeFile2.txt'...ecc. Per non complicarci la vita, in prima battuta, prima di scrivere tutti i testi che magari sono parecchi, mi basta costuirmi una cartella tipo 'nomeCartella' con all'interno una serie di file con sempre la stessa stringa che può essere anche soltanto un carattere spazio invisibile, in attesa che col tempo si compilino i file.
Volendo si può gestire la cosa senza neanche fare la connessione al database per sapere quale siano gli indici dei file da usare poi nei nomi dei file: un bel ciclo for con l'indice iniziale e quello finale e finisce lì, male che va se nel database ci sono salti di indici, si genereranno anche file con indici inesistenti nel database, ma non daranno alcun errore
Ora ci prepariamo una pagina php nuova in cui ci inseriamo il codice che ci serve per fare il processo in automatico così mi ritrovo la cartella bella pronta tutta riempita con i file di testo. Per farlo sfruttiamo le funzioni sulla gestione dei file che php mette a disposizione e che sono molto comode. La documentazione ufficiale su tutte le funzioni per la gestione dei file si trova qui (Filesystem Functions), un mio articolo precedente in cui parlo della scrittura generica di un file con il codice php si trova qui (Scrivere file di testo con script PHP a oggetti ), ora però dobbiamo adattare il tutto alle nostrre esigenze.
Ecco il codice della nostra paginetta php, il suo funzionamento è spiegato con i commenti lungo il codice, con questa premessa:
1-va costruita e messa sul server a mano una cartella vuota con il nome che ci serve in questo caso è 'nomeCartella' (la scelta è ovviamente personale ma è meglio che sia un nome autoesplicativo)
<?php
//classe che si occupa della scrittura dei file
class ScriviFile {
public function scriviTesto($percorsoNomeFile, $testo) {
$file = fopen($percorsoNomeFile, 'a+');//la funzone open prende vari parametri per decidere il tipo di permessi che si hanno sul file, in questo caso è a+, così crea il file anche se non esiste ancora e pone il pontatore alla fine del testo scritto
fwrite($file, $testo);
fclose($file);
}
};
//ora si fa un ciclo che ripete l'operazione di scrittura dei file tutti uguali per un numero noto di volte in modo da generare il contatore che farà parte del nome del file
$idFile=1;
for ($idFile = 1 ; $idFile<= 232; ++$idFile) {
//l'oggetto objScriviFile che viene istanziato, prende due parametri in ingresso, uno è il percorso con il nome da dare al file, l'altro è la stringa che costituisce il testo da inserire nel file quindi ora ce li personalizziamo:
$nomeFile='nomeCartella/File'.$idFile.'.html';//qui devo costruire il percorso completo e dare il nome al file: quello che mi aspetto di ottenere è una cartella che si chiama nomeCartella con dentro tanti file File1.html, File2.html ...ecc
$stringa=' '; //qui è il testo da scrivere nei file
//ora si costruisce l'oggetto che fa il lavoro di scrittura
$objScriviFile = new ScriviFile;
$objScriviFile->scriviTesto($nomeFile, $stringa);//tutto quanto è scritto qui si lascia inalterato perchè ho già personalizzato sopra
}
?>
Ho ottenuto un generatore automatico di file tutti uguali tranne che nel contatore che identifica il nome
Una volta scritta questa pagina php, la si scarica sul server in cui è residente il nostro bel sito e la si richiama dal browser mandandola così in esecuzione. Se tutto fila liscio, andando a controllare la cartella che prima era vuota, adesso deve essere piena di file.
Ora si deve fare attenzione su un punto: usando il parametro a+, si scrive il file e il puntatore si mette ALLA FINE del file, lo script fa il suo lavoro e siamo tutti contenti. Poi però c'è la variabile umana: capita che si mandi in esecuzione la pagina un'altra volta, magari solo perchè quel bastardo dell'autocompletamento degli indirizzi nel browser te la fa partire senza che uno lo voglia effettivamente, e allora che succede? Il file in apertura viene già trovato pieno e si scrive di nuovo il testo partendo dalla coda del file, quindi se uno non ci pensa, si ritrova il testo estratto nel file duplicato tante volte quante è andato in esecuzione lo script. Per non complicarsi la vita basta eliminare il file php dal server dopo il suo utilizzo. Tutto qui.
Ultima revisione pagina: 2019-08-02