Php come si pronuncia Lavorare con i file in php: apertura, scrittura, lettura. Metodi fopen tradizionali

Ultimo aggiornamento: 1.11.2015

Come la maggior parte dei linguaggi di programmazione, PHP supporta i file, che rappresentano un modo per archiviare informazioni.

Lettura e scrittura di file

Apertura e chiusura di file

La funzione fopen() è definita in PHP per aprire i file. Ha la seguente definizione: risorsa fopen(string $filename, string $mode) . Il primo parametro $filename rappresenta il percorso del file e il secondo parametro rappresenta la modalità di apertura. A seconda dello scopo dell'apertura e del tipo di file, questo parametro può assumere i seguenti valori:

    "r" : il file viene aperto in sola lettura. Se il file non esiste, restituisce false

    "r+": il file viene aperto in sola lettura e scrivibile. Se il file non esiste, restituisce false

    "w" : il file è aperto per la scrittura. Se tale file esiste già, verrà sovrascritto, altrimenti verrà creato.

    "w+": il file viene aperto in scrittura con leggibilità. Se tale file esiste già, verrà sovrascritto, altrimenti verrà creato.

    "a" : il file viene aperto per la scrittura. Se un file di questo tipo esiste già, i dati vengono scritti alla fine del file e rimangono i vecchi dati. Se il file non esiste, viene creato

    "a+": il file viene aperto in lettura e scrittura. Se il file esiste già, i dati vengono aggiunti alla fine del file. Se il file non esiste, viene creato

Il risultato della funzione fopen è un descrittore di file. Questo handle viene utilizzato per le operazioni sul file e per chiuderlo.

Al termine, il file deve essere chiuso utilizzando la funzione fclose(), che accetta un descrittore di file come parametro. Ad esempio, apriamo e chiudiamo un file:

$fd = fopen("form.php", "r") or die("Impossibile aprire il file"); fclose($fd);

Il costrutto or die("testo errore") consente di terminare lo script e visualizzare alcuni messaggi di errore se la funzione fopen non è stata in grado di aprire il file.

Leggere un file

Per leggere un file è possibile utilizzare diverse funzioni. Per la lettura riga per riga viene utilizzata la funzione fgets(), che accetta un descrittore di file e restituisce una riga letta. Esaminiamo riga per riga l'intero file:

Ogni volta che chiami fgets() , PHP posizionerà un puntatore alla fine della stringa letta. Per tenere traccia della fine di un file viene utilizzata la funzione feof(), che restituisce true quando il file termina. E finché non viene raggiunta la fine del file, possiamo usare la funzione fgets().

Leggendo l'intero file

In questo caso non è necessario aprire esplicitamente il file, ottenere un handle e quindi chiudere il file.

Blocca la lettura

Puoi anche eseguire una lettura blocco per blocco, ovvero leggere un certo numero di byte da un file utilizzando la funzione fread():

La funzione fread() accetta due parametri: il descrittore di file da leggere e il numero di byte da leggere. Durante la lettura di un blocco, il puntatore nel file si sposta alla fine di questo blocco. E anche con l'aiuto della funzione feof() puoi tenere traccia del completamento del file.

Scrivi file

Per scrivere un file viene utilizzata la funzione fwrite() che scrive una stringa nel file:

Un'altra funzione fputs() funziona in modo simile:

Lavorare con il puntatore del file

Quando si apre un file in lettura o scrittura in modalità "w", il puntatore nel file viene posizionato all'inizio. Durante la lettura dei dati, PHP sposta il puntatore nel file alla fine del blocco di dati letti. Tuttavia, possiamo anche manipolare manualmente il puntatore nel file e impostarlo su una posizione arbitraria. Per questo è necessario utilizzare la funzione fseek, che ha la seguente definizione formale:

int fseek (risorsa $handle, int $offset [, int $whence = SEEK_SET])

Il parametro $handle rappresenta un handle di file. Il parametro $offset è l'offset in byte relativo all'inizio del file da cui inizierà la lettura/scrittura. Il terzo parametro opzionale specifica come deve essere impostato l'offset. Può assumere tre valori:

    SEEK_SET: valore predefinito, imposta l'offset sui byte di offset dall'inizio del file

    SEEK_CUR: imposta l'offset sui byte di offset relativi all'inizio della posizione corrente nel file

    SEEK_END: ​​imposta l'offset sui byte di offset dalla fine del file

La funzione fseek() restituisce 0 se il puntatore viene impostato correttamente e -1 se fallisce.

Un esempio di utilizzo della funzione:

$fd = fopen("ciao.txt", "w+") o die("apertura del file non riuscita"); $str = "Ciao mondo!"; // stringa da scrivere fwrite($fd, $str); // scrive la stringa all'inizio fseek($fd, 0); // posiziona il puntatore del file all'inizio fwrite($fd, "Oink"); // scrive la riga all'inizio fseek($fd, 0, SEEK_END); // posiziona il puntatore alla fine fwrite($fd, $str); // scrive un'altra riga alla fine fclose($fd);

Informazioni sull'uso delle funzioni fopen, fclose, feof, fgets, fgetss e fscanf

Elenchiamo tutte le possibilità

Uno dei vantaggi di lavorare con linguaggi di programmazione moderni come PHP è il numero di funzionalità disponibili. PHP potrebbe facilmente ispirarsi al motto del Perl: "Esiste più di un modo per fare le cose", soprattutto quando si tratta di gestire i file. Ma con l’abbondanza di strumenti disponibili, sorge la domanda su quale sia il migliore per portare a termine il lavoro. Naturalmente, in realtà, la risposta a questa domanda dipende dagli obiettivi che ti prefiggi durante l'elaborazione del file, quindi vale la pena dedicare tempo all'apprendimento di tutte le funzionalità della lingua.

Metodi fopen tradizionali

I metodi fopen sono probabilmente i più familiari ai programmatori C e C++ del passato, poiché sono, più o meno, gli stessi strumenti che sono stati a portata di mano per anni se hai lavorato con questi linguaggi di programmazione. Per ognuno di questi metodi, segui la procedura standard che prevede l'utilizzo di fopen per aprire un file, una funzione per leggere i dati e quindi fclose per chiudere il file, come mostrato nel Listato 1.

Listato 1. Apertura e lettura di un file con fgets
$file_handle = fopen("miofile", "r"); while (!feof($file_handle)) ( $riga = fgets($file_handle); echo $riga; ) fclose($file_handle);

Sebbene queste funzioni siano familiari ai programmatori più esperti, lasciatemi analizzare come funzionano. In realtà, stai eseguendo i seguenti passaggi:

  1. Apri il file. $file_handle contiene un riferimento al file stesso.
  2. Controlla se hai raggiunto la fine del file.
  3. Continua a leggere il file fino a raggiungere la fine, stampando ogni riga che leggi.
  4. Chiudi il file.

Con questo in mente, esaminerò ciascuna funzione di file utilizzata qui.

funzione fopen

La funzione fopen stabilisce una connessione con un file. Dico "connetti" perché, oltre ad aprire un file, fopen può anche aprire un URL:

$fh = fopen("http://127.0.0.1/", "r");

Questa riga di programma crea un collegamento alla pagina precedente e consente di iniziare a leggerla come file locale.

Nota: L'opzione "r" utilizzata in fopen indica che il file è di sola lettura. Poiché la scrittura su un file non rientra nell'ambito di questo articolo, non elencherò tutti i possibili valori per il parametro. Tuttavia, devi cambiare "r" in "rb" se stai leggendo da file binari per compatibilità multipiattaforma. Di seguito verrà riportato un esempio di questo tipo.

funzione fef

Il comando feof determina se è stata effettuata una lettura fino alla fine del file e restituisce un valore True (True) o False (False). Il ciclo continua fino alla fine di "miofile". Tieni presente che feof restituisce False anche se stai leggendo un URL e la connessione è scaduta perché non ci sono più dati da leggere.

funzione fclose

Saltiamo la parte centrale del Listato 1 e andiamo alla fine; fclose fa l'opposto di fopen: chiude la connessione a un file o URL. Dopo aver eseguito questa funzione, non sarai più in grado di leggere da un file o da un socket.

funzione fgets

Tornando indietro di qualche riga nel Listato 1 si arriva al cuore del processo di elaborazione del file: leggere il file stesso. La funzione fgets è l'"arma" che hai scelto per il primo esempio. Prende una riga di dati da un file e la restituisce come una stringa. Da lì è possibile generare dati o elaborarli in altro modo. L'esempio nel Listato 1 stampa l'intero file.

Se decidi di limitare la dimensione del blocco di dati su cui stai lavorando, puoi aggiungere un argomento a fgets per limitare la lunghezza massima della stringa di dati catturata. Ad esempio, utilizza il codice seguente per limitare una stringa a 80 caratteri:

$string = fgets($file_handle, 81);

Ricorda "\0", l'indicatore di fine riga in C, e imposta la lunghezza su un carattere più lungo del necessario. Come puoi vedere, l'esempio sopra utilizza 81 quando hai bisogno di 80 caratteri. Prendi l'abitudine di aggiungere un carattere extra ogni volta che devi impostare un limite di stringa per questa funzione.

funzione paura

La funzione fgets è solo una delle tante funzioni disponibili per leggere un file. Questa è una delle funzioni più comunemente utilizzate, poiché nella maggior parte dei casi l'elaborazione riga per riga di un file è la più ragionevole. In effetti, molte altre funzionalità offrono funzionalità simili. Comunque sia, l'analisi riga per riga non è sempre ciò di cui hai bisogno.

E qui passiamo al fread. La funzione fread viene utilizzata per uno scopo leggermente diverso da fgets: è destinata alla lettura da file binari (ovvero file non originariamente composti da testo leggibile dall'uomo). Poiché per i file binari il concetto di "stringa" non è rilevante (le strutture dati logiche normalmente non sono suddivise in righe), è necessario specificare il numero di byte da leggere.

$fh = fopen("miofile", "rb"); $dati = fread($file_handle, 4096);

L'esempio precedente legge 4096 byte (4 KB) di dati. Tieni presente che, indipendentemente dal valore specificato, fread non leggerà più di 8192 byte (8 KB).

Supponendo che il file non sia più grande di 8 KB, lo snippet seguente dovrebbe leggere l'intero file in un'unica riga.

$fh = fopen("miofile", "rb"); $dati = fread($fh, dimensione file("miofile")); fchiudi($fh);

Se il file è più grande, dovrai utilizzare un loop per leggerne il resto.

funzione fscanf

Tornando all'elaborazione delle stringhe, fscanf è anche il successore della tradizionale funzione di libreria di file C. Se non la conosci, fscanf legge i campi dati in variabili da un file.

lista ($campo1, $campo2, $campo3) = fscanf($fh, "%s %s %s");

Le stringhe di formato utilizzate in questa funzione sono documentate in molte fonti come PHP.net, quindi non ripeterò queste informazioni qui. Basti dire che la formattazione delle stringhe è molto flessibile. Va anche detto che tutti i campi vengono inseriti nella variabile restituita dalla funzione. (In C, verrebbero passati come argomenti.)

funzione fgetss

La funzione fgetss è diversa dalle tradizionali funzioni di file e ti dà un'idea migliore delle capacità di PHP. Funziona come fgets , ma scarta tutti i tag HTML o PHP che trova, lasciando solo il semplice testo. Prendi il seguente file HTML.

Listato 2. File HTML di esempio
Il mio titolo

Se capisci cosa significa "Perché non c'è nessuno che non ti dia dolore" allora ascolti troppo la band America



Passiamolo attraverso la funzione fgetss.

Listato 3. Utilizzo di fgetss
$file_handle = fopen("miofile", "r"); while (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Ecco cosa otterrai come output:

Il mio titolo Se capisci cosa significa "Perché non c'è nessuno che non ti dia dolore", allora ascolti troppo la band America

funzione fpassthru

Indipendentemente da come leggi i dati da un file, puoi stampare il resto dei dati utilizzando la pipe di output standard con la funzione fpassthru.

fpassante($fh);

Questa funzione stampa i dati quindi non è necessario inserirli in una variabile.

Elaborazione di file non lineare: spostamento attraverso il file

Naturalmente le funzioni sopra descritte consentono solo di leggere da un file in sequenza. I file più complessi potrebbero richiedere lo spostamento in parti diverse del file all'inizio o alla fine del file. Per fare ciò, è necessaria la funzione fseek.

fseek($fh, 0);

L'esempio precedente torna all'inizio del file. Se non vuoi saltare direttamente all'inizio del file, ad esempio un kilobyte è sufficiente, scrivi semplicemente:

fseek($fh, 1024);

A partire da PHP V4.0 sono disponibili anche molte altre opzioni. Ad esempio, se devi avanzare di 100 byte dalla posizione corrente, puoi utilizzare il seguente codice:

fseek($fh, 100, SEEK_CUR);

Allo stesso modo, il salto indietro di 100 byte viene eseguito da:

fseek($fh, -100, SEEK_CUR);

Se vuoi tornare alla posizione 100 byte prima della fine del file, usa invece SEEK_END.

fseek($fh, -100, SEEK_END);

Una volta raggiunta la nuova posizione, puoi utilizzare fgets , fscanf o un'altra funzione per leggere i dati.

Nota: non è possibile utilizzare fseek su descrittori di file che fanno riferimento a un URL.

Catturare un intero file

Passiamo ora ad alcune delle capacità uniche di elaborazione dei file di PHP: gestire grandi blocchi di dati in una o due righe. Ad esempio, come puoi prendere un file e visualizzarne tutto il contenuto sulla tua pagina Web? Bene, hai visto un esempio di utilizzo di un ciclo con fgets . Ma come renderlo più semplice? Il processo è quasi ridicolmente semplice quando si utilizza fgetcontents , che inserisce l'intero file in una stringa.

$mio_file = file_get_contents("mionomefile"); echo $mio_file;

Sebbene non sia l'opzione migliore, puoi scrivere questo comando in modo ancora più breve:

echo file_get_contents("mionomefile");

Questo articolo riguarda principalmente l'elaborazione dei file locali, tuttavia vale la pena notare che puoi anche acquisire, visualizzare e analizzare altre pagine Web utilizzando le funzioni descritte.

echo file_get_contents("http://127.0.0.1/");

Questo comando è in realtà lo stesso di:

$fh = fopen("http://127.0.0.1/", "r"); fpassante($fh);

Probabilmente guarderai questi esempi e penserai: "Questo richiede ancora troppo lavoro". Gli sviluppatori PHP sono d'accordo con te. Quindi puoi abbreviare il comando precedente in:

leggifile("http://127.0.0.1/");

La funzione readfile invia l'intero contenuto di un file o di una pagina Web al buffer di output predefinito. Per impostazione predefinita, questo comando stampa un messaggio di errore in caso di errore. Per evitare questo comportamento (se lo desideri), prova il comando:

@readfile("http://127.0.0.1/");

Naturalmente, se è necessario elaborare il contenuto dei file, probabilmente la singola riga restituita da file_get_contents è eccessiva. Potresti volerlo dividere prima con la funzione split().

$array = split("\n", file_get_contents("miofile"));

Ma perché hai bisogno di tutta questa complessità se esiste una funzione perfettamente adatta che farà questo lavoro per te? La funzione PHP file() realizza questo compito in un solo passaggio: restituisce un array di stringhe i cui elementi sono le righe del file.

$array = file("miofile");

Va notato che c'è una leggera differenza tra i due esempi sopra. Il comando split rimuove i ritorni a capo, mentre il comando file termina le righe dell'array con i ritorni a capo (come fgets).

Le capacità di PHP, tuttavia, vanno ben oltre quelle sopra descritte. Puoi analizzare interi file .ini in stile PHP con un solo comando parse_ini_file. Il comando parse_ini_file si applica a file come il Listato 4.

Listato 4. File .ini di esempio
; Nome del commento = Missione "Re Artù" = Cercare il Santo Graal colore preferito = Blu Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

I seguenti comandi rappresentano un file come un array e quindi stampano quell'array:

$file_array = parse_ini_file("holy_grail.ini"); stampa_r $array_file;

Ciò produrrà il seguente output:

Listato 5. Output
Array ( => Re Artù => Alla ricerca del Santo Graal => Blu => Mark Twain => Whoopi Goldberg)

Naturalmente, potresti notare che questo comando ha unito le sezioni. Questa è l'azione predefinita, ma puoi personalizzarla facilmente con il secondo argomento per analizzare_ini_file: process_sections , che è una variabile booleana. Imposta process_sections su True.

$file_array = parse_ini_file("holy_grail.ini", true); stampa_r $array_file;

E il tuo output sarà simile a:

Listato 6. Output
Array ( => Array ( => Re Artù => Alla ricerca del Santo Graal => Blu) => Array ( => Mark Twain => Whoopi Goldberg))

PHP inserisce i dati in un array multidimensionale facile da analizzare.

Ma questa è solo la punta dell’iceberg quando si parla di gestione dei file in PHP. Funzioni più avanzate come tidy_parse_file e xml_parse possono aiutarti ad analizzare rispettivamente documenti HTML e XML. Consulta la sezione per ulteriori informazioni su come funzionano queste funzioni. Vale la pena considerarli entrambi se lavorerai con questi tipi di file, ma invece di esaminare tutti i possibili tipi di file, potresti voler dare un'occhiata più da vicino al contenuto di questo articolo, dove ci sono alcuni buoni suggerimenti generali regole per lavorare con le funzionalità che ho descritto finora.

Buono stile di programmazione

Non dare mai per scontato che tutto nel tuo programma funzionerà come previsto. Ad esempio: cosa succede se il file che stai cercando è stato spostato? Cosa succede se, a seguito di una modifica dei permessi, non riesci a leggere il contenuto del file? È possibile verificare in anticipo l'esistenza di un file e i diritti di lettura utilizzando i metodi file_exists e is_readable.

Listato 7. Utilizzo di file_exists e is_readable
$nomefile = "miofile"; if (file_esiste($nomefile) && è_leggibile ($nomefile)) ( $fh = fopen($nomefile, "r"); # Elaborazione fclose($fh); )

Tuttavia, in pratica questo pezzo di codice sarà probabilmente eccessivo per il tuo compito. Gestire i valori restituiti da fopen è più semplice e preciso.

if ($fh = fopen($nomefile, "r")) ( # Elaborazione fclose($fh); )

Poiché fopen restituisce False in caso di errore, ciò garantisce che il file verrà elaborato solo se è stato possibile aprire il file. Naturalmente, se il file non esiste o è illeggibile, ti aspetteresti che il valore restituito sia negativo. Pertanto, tale controllo è una trappola in cui cadono tutti i potenziali problemi. In alternativa, è possibile utilizzare il programma per uscire o visualizzare un messaggio di errore se non è possibile aprire il file.

Come fopen , le funzioni file_get_contents , file e readfile restituiscono False se il file non può essere aperto o elaborato. Anche le funzioni fgets , fgetss , fread , fscanf e fclose restituiscono False in caso di errore. Naturalmente, ad eccezione di fclose , probabilmente hai già elaborato i risultati restituiti. Per quanto riguarda fclose , non c'è molto che puoi fare se il descrittore di file non è chiuso correttamente, quindi controllare il valore restituito da fclose è solitamente ridondante.

La scelta è tua

A PHP non mancano modi efficienti per leggere e analizzare i file. Le funzioni classiche come fread possono servirti bene per la maggior parte del tempo, oppure potresti essere più attratto dalla semplicità di readfile se necessario per portare a termine il lavoro. La scelta dipende davvero da ciò che stai cercando di realizzare.

Se si elaborano grandi quantità di dati, è probabile che fscanf sia più utile ed efficiente rispetto, ad esempio, all'utilizzo di file in combinazione con i successivi comandi split e sprintf. D'altra parte, se stai visualizzando solo una grande quantità di testo con modifiche minori, al contrario, utilizzare le funzioni file , file_get_contents o readfile potrebbe essere più appropriato. È probabile che questa soluzione sia corretta quando si utilizza PHP per la memorizzazione nella cache o addirittura per la creazione di un server proxy temporaneo.

PHP fornisce molti strumenti per lavorare con i file. Dai un'occhiata più da vicino a ciascuno di essi e scopri quali sono gli strumenti più adatti al progetto a cui stai lavorando. Hai un'ampia gamma di strumenti tra cui scegliere, sfruttali al meglio e divertiti a elaborare i tuoi file con PHP.

PHP è apparso molto più tardi rispetto ai linguaggi di programmazione, ha rafforzato le loro posizioni, ha formulato idee generali su sintassi, logica, variabili e altri oggetti del programma. I file e le funzioni per lavorarci non hanno fatto progressi e anche il problema della codifica dei file, sorto per ragioni naturali, non ha portato a soluzioni radicalmente nuove.

Revisione generale

Il lavoro di base con i file, qualunque essi siano, è aprire, leggere/scrivere e chiudere. Puoi utilizzare le funzioni di blocco / sblocco dell'accesso a un file mentre viene elaborato, puoi impostare la posizione di lettura / scrittura nel file: tutto, come prima, è in un lontano passato.

Un punto importante in PHP è l'abbondanza di funzioni per lavorare con i file e i loro casi d'uso. In pratica, è sufficiente applicare opzioni semplici ma funzionanti. Un file è innanzitutto la memoria di un programma. Può memorizzare informazioni. Lo scopo di qualsiasi programma, lo scopo di qualsiasi sito è presentare, elaborare e garantire la sicurezza delle informazioni.

Circostanza essenziale

Un tempo la compatibilità, almeno dal basso verso l'alto, era un requisito incrollabile. Cioè, una volta che un programma scritto in una versione del linguaggio di programmazione viene idealmente compilato/interpretato nella versione successiva. Questo non è il caso della programmazione moderna. Il requisito della compatibilità delle costruzioni sintattiche del linguaggio è passato alla storia e la lotta tra stili, strumenti di programmazione e versioni di determinati strumenti è diventata la norma della loro vita.

Lavorare con i file, come con i database, è importante quanto l'interfaccia del sito. Il primo dovrebbe essere costruito in modo tale che quando si cambia piattaforma, hosting, versione linguistica, non sia necessario modificare il codice del sito. L'interfaccia per lavorare con i file dovrebbe essere collocata in uno script separato e garantire la piena compatibilità, così come il design del sito dovrebbe adattarsi adeguatamente a qualsiasi dispositivo, browser e fornire le stesse funzionalità al resto delle funzionalità del sito.

Leggi e modifica te stesso

Il programma può cambiare da solo, cioè lo script può essere migliorato? Fino ad oggi, questa domanda interessa molti. Ma il compito sembra molto più pratico: PHP leggere un file PHP. Non sempre uno sviluppatore può risolvere un particolare problema scrivendo un codice specifico. A volte è necessario modificarlo quando un visitatore è arrivato sul sito e ha formulato una domanda non prevista in fase di sviluppo.

Come in tutti gli altri casi, prima di tutto bisogna aprire il file. Non importa se il file esiste o meno. Se si sa che il file esiste (file_exists() restituisce una risposta positiva), fopen() viene utilizzato con accesso 'r', 'r+', 'a', 'a+'. Se il file non esiste ancora, allora con accesso 'a', 'a+', 'w', 'w+'. Il risultato dell'apertura di un file sarà il suo descrittore. Il file viene chiuso con la funzione fclose().

È conveniente utilizzare PHP leggendo un file in un array quando non è necessario elaborarlo al momento della lettura.

if (file_esiste($fNome)) (

$aRighe = file($fNome)

In questa variante, ogni riga del file entra nell'elemento dell'array in sequenza. Tieni presente che le funzioni file() o file_get_contents() non necessitano di aprire un file e chiuderlo.

Quando il file di input è troppo grande e hai bisogno di trovare pochissime informazioni, o per altri motivi, puoi utilizzare PHP per leggere il file riga per riga. PHP offre la possibilità di farlo con le funzioni fgets() e fgetc().

$fvs = fopen($Nomef, "r")

while ((false !== ($cLine = fgets($fvs, 2000)))) (

$cRighe .= "
" . $i . "). " .$cLinea

Entrambe le opzioni funzionano perfettamente. Tuttavia, quando PHP legge un file PHP per modificarlo successivamente, è necessario prendere delle precauzioni. Non è sempre possibile prevedere le opzioni per il suo utilizzo da parte del visitatore nella fase di sviluppo del sito. È meglio se gli script vengono modificati all'interno delle funzioni del sito e la gestione di questa modifica non è disponibile al visitatore, compreso l'amministratore delle risorse.

Salvataggio dei risultati

Le informazioni ricevute e aggiornate vengono scritte nel file dalla funzione fputs() riga per riga o dalla funzione file_put_contents() nella sua interezza.

$fNome = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fNome, "a")

gregge($fvs, LOCK_EX)

$cRiga = "1 riga". cr(10)

fputs($fvs, $cline)

$cRiga = "2 righe" . cr(10)

fputs($fvs, $cline)

stormo($fvs, LOCK_UN)

Nella versione riga per riga della registrazione è possibile manipolare i dati durante il processo di registrazione, nel secondo caso la stringa o l'array da scrivere viene inserito nell'intero file.

$file = "scData.php"

$cContenuto = file_get_contenuto($file)

// aggiungendo una voce

$cContenuto .= "nuova voce\n"

// riscrive il file

file_put_contents($file, $cContenuti)

Leggere e scrivere file PHP è semplice e naturale. Tuttavia, è importante tenere presente che ogni file ha un nome, un'estensione e un percorso (cartella). Affinché uno script PHP possa leggere e scrivere file, questo script deve avere i diritti appropriati. Vengono automaticamente esposti sull'hosting, ma in alcuni casi necessitano di essere espansi.

In alcuni casi, è preferibile verificare i risultati eseguendo una lettura di prova. La scrittura di file PHP lo richiede in fase di sviluppo, ma in alcuni casi, nell'interesse della sicurezza o dell'affidabilità del sito, la convalida dell'immissione dei dati è essenziale.

Una caratteristica di PHP, MySQL, JavaScript e soprattutto dei browser: lasciare che alcuni errori vadano alla deriva in silenzio. “Non riconosciuto, non realizzato…” non è una buona pratica all’avanguardia della tecnologia informatica, ma insegna agli sviluppatori a non commettere errori e a scrivere codice pulito e di alta qualità, il che non è male.

PHP e lavorare con documenti reali

PHP Leggere un file PHP è sicuramente di interesse pratico, ma questo è il regno della programmazione. L'utente e il visitatore del sito sono interessati alle informazioni applicate, che è abituato a vedere sotto forma di tabelle e documenti, in particolare nei formati di file *.xlsx e *.docx. Questi sono file MS Excel e MS Word.

Gli elenchi di beni, prezzi e caratteristiche sono solitamente formati sotto forma di tabelle, quindi la lettura PHP di un file Excel è essenziale.

Le librerie PHPExcel e PHPWord sono state sviluppate per funzionare con tali file. Tuttavia, il contenuto dei file *.xlsx e *.docx è presentato nello standard OOXML, ovvero il documento realmente comprensibile è rappresentato da un archivio zip. L'archivio zip è un insieme di file, incluse immagini, oggetti, formule, inserti di altri programmi. I file di testo sono qui rappresentati da descrizioni sotto forma di tag. Leggere un file di questo tipo non è sufficiente, è necessario analizzarlo per ottenere il contenuto e la struttura per l'uso e la modifica.

Ciò significa che l'operazione di lettura si trasforma in una procedura di apertura dell'archivio. Queste librerie aprono autonomamente l'archivio dei documenti e forniscono allo sviluppatore ampie funzioni per leggere, elaborare e scrivere tali documenti.

Tabelle Excel

include_once 'PhpOffice/PhpExcel/IOFactory.php'

funzione scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//questo array contiene array di stringhe

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//trattamento

foreach($aSheet->getRowIterator() as $row)(

$cellIterator = $riga->getCellIterator()

foreach($cellIterator come $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $elemento)

Leggere ed elaborare file Excel è molto più difficile che elaborare documenti Word. L'opzione migliore, se è necessario implementare un progetto serio per la lettura e l'elaborazione delle informazioni dell'applicazione, è innanzitutto padroneggiare la libreria PHPWord. Ciò fornirà una buona esperienza e un rapido accesso alle specifiche del problema.

Documenti di parole

Solo due righe:

$oWord = nuovo \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Il documento $cFileName è ora disponibile per l'elaborazione. Successivamente viene aperto l'archivio, selezionati e analizzati i suoi contenuti, che possono essere visualizzati sul sito, modificati e riscritti.

$zipClass = nuovo ZipArchive()

$zipClass->open($this->tempFileName)

// legge l'intero contenuto del documento

per ($i=0; $i<$zipClass->numFile; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNomeInExt = substr($cNomeIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// i file con estensioni ".xml" e ".xml.rels" vengono memorizzati nella tabella dei documenti

// ogni riga xml viene scritta con un numero di serie univoco

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// tutti gli altri file vengono scritti nella cartella documenti così come sono

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // contenuto come file

Le possibilità che si aprono con l'aiuto di PHP Excel e PHP Word ti consentono di manipolare documenti reali e rendere il loro contenuto rilevante in qualsiasi momento. Nel mondo dinamico di oggi, questo diventa molto importante. Il centro di gravità si è da tempo spostato dall’uso locale della tecnologia informatica allo spazio virtuale di Internet. Pertanto, la creazione di tabelle e documenti nei prodotti locali di Microsoft è meno efficiente che lavorare con tali documenti in modalità automatica e semiautomatica su un sito disponibile non solo per il creatore della tabella o del documento, ma anche per i suoi consumatori .

File di testo, un'altra vita

In prima approssimazione, i file di testo sono più semplici dei file PHP o dei documenti applicativi. Tuttavia, c'è qualcosa a cui pensare qui. Le operazioni di lettura/scrittura di tali file sono già indicate sopra, ma il significato di tali file è molto più importante.

Poiché esistono un client e un server (il primo è dominato da JavaScript, il secondo da PHP), anche i meccanismi dei cookie e delle sessioni non possono far fronte alla necessità di trasferire informazioni tra script, pagine o altri processi.

È possibile riflettere le modifiche desiderate nel database, ma nonostante tutti i vantaggi e la velocità, piccoli file di testo temporanei o permanenti possono rappresentare un'opzione molto più interessante per il trasferimento delle informazioni. Se non crei molti file di piccole dimensioni e non ne controlli le dimensioni, possono costituire una versione specifica e più flessibile del database.

PHP che legge un file di testo è veloce e può essere immediatamente analizzato in una struttura, array o oggetto. Quest'ultimo è molto importante, poiché consente di creare oggetti che vivono al di fuori del tempo assegnato a uno script PHP, che, come sai, può esistere solo sul server e solo al momento del caricamento della pagina, della generazione della risposta AJAX o per qualsiasi altro motivo che causi l'avvio dell'interprete PHP.

Se si pensa al fatto che un file di testo è il contenuto e la struttura dello sviluppatore, un file PHP è la sintassi dell'interprete più la logica dello sviluppatore, e le descrizioni "taggate" html, css, xml sono più elementi semantici, ma regolamentati secondo standard statici. Si può giungere alla conclusione che probabilmente è giunto il momento che i file acquisiscano nuovo contenuto e che questo dovrebbe determinarne la qualità e la logica di applicazione. Proprio perché la programmazione non è ancora pronta per la fase successiva del suo sviluppo, i file ora sono solo file che lo sviluppatore crea e ne definisce l'utilizzo.

La cosa più interessante e promettente è quando PHP legge da solo un file PHP quando se ne presenta la necessità. E la semplice lettura di una riga da un file in PHP comporta la creazione di un oggetto, almeno nello stato in cui è stato salvato. Queste non sono idee del tutto familiari, ma nel mondo moderno tutto cambia così rapidamente.

16,5K

In effetti, come aprire un file php non è un grosso problema. Può essere più difficile aprire una bottiglia di birra quando ci si trova in mezzo a una foresta. Ma solo i programmatori accaniti la pensano così. E per i principianti, parliamo di tutte le funzionalità di php per lavorare con i file:

file php

I file con estensione php contengono codice scritto nel linguaggio di programmazione con lo stesso nome. A differenza di altri linguaggi, php è un linguaggio di programmazione lato server. Cioè, funziona lato server. Pertanto, per eseguire il debug del codice, è necessario installare un server locale sul computer client.

Per lavorare con i file php, vengono utilizzate applicazioni speciali: editor di programmi. I più comuni tra questi sono:

  • tessitore di sogni.
  • Modificare.
  • Sviluppo PHP di Eclipse.
Quando si creano siti basati su php, potrebbe essere necessario riutilizzare il codice del programma. In tali situazioni, è conveniente includere soluzioni già pronte che si trovano in un altro file. Per questo viene utilizzato il costrutto include. La sua sintassi è:

includere il nome del file

Esempio di connessione:

File collegato:


È anche possibile includere un file utilizzando il costrutto require. A differenza di include, include un file anche prima che il codice del programma venga eseguito. Con l'aiuto di require nel codice è possibile una sola chiamata a questo file. Dopo accessi ripetuti, il sistema visualizzerà un messaggio di errore globale e interromperà l'esecuzione del programma.

Il costrutto include collega l'origine solo durante l'esecuzione del programma. Supporta la lettura multipla di file php. Se si verifica un errore, verrà visualizzato solo un messaggio di avviso e l'esecuzione del codice continuerà dalla riga successiva.

Apertura e chiusura di file

In php, tutte le operazioni con i file vengono eseguite in più fasi:

  • Apertura di un file;
  • Modifica dei contenuti;
  • Chiusura di un file.

La funzione fopen() viene utilizzata per aprire un file. La sua sintassi è:

int fopen(string nomefile, modalità string [, int use_include_path])

Argomentazioni accettate:

  • string filename: nome del file o percorso assoluto. Se il percorso del file non è specificato, verrà cercato nella directory corrente. Se il file cercato non esiste, il sistema visualizzerà un messaggio di errore. Esempio:

  • modalità stringa: specifica la modalità di apertura del file. Valori accettati dall'argomento:
  • r - il file è aperto in sola lettura, il puntatore del file è impostato all'inizio;
  • r+ – il file è aperto in lettura e scrittura;
  • w - Crea un nuovo file di sola scrittura. Se esiste già un file con lo stesso nome, cancella automaticamente tutti i dati;
  • w+ - crea un nuovo file per la scrittura e la lettura. Se tale file esiste, i suoi dati vengono completamente sovrascritti con quelli nuovi;
  • a - il file è aperto in scrittura. Il puntatore è posizionato alla fine. Cioè, la scrittura nel file php non inizierà dall'inizio, ma dalla fine;
  • a+ - apre il file in modalità lettura-scrittura. La registrazione inizierà dalla fine;
  • b – modalità di lavorare con un file contenente dati binari (nel sistema binario). Questa modalità è disponibile solo sul sistema operativo Windows.

La funzione fclose() viene utilizzata per chiudere l'accesso a un file. Sintassi:

int fclose (int file), dove int file è un handle per il sito da chiudere.

Dopo ogni lettura o scrittura il file deve essere chiuso con questa funzione. Altrimenti, lo stream creato per il file rimane aperto. E questo porta ad un consumo inutile delle capacità del server.

Esempio:

Lettura e scrittura di file

Per visualizzare semplicemente l'intero contenuto di un file, la funzione readfile() è l'ideale. La sua sintassi è:

readfile (string filename) , dove string filename è una stringa nome file (non un descrittore di file).


Lo stesso file può essere letto utilizzando la funzione fpassthru(). Legge i dati dalla posizione finale del puntatore alla fine del file. La sua sintassi è:

int fpassthru (file int)

Per lavorare con la funzione, è necessario aprire e chiudere il file. Esempio:

Il risultato è simile al precedente.

Le funzioni del file php permettono di leggere il contenuto riga per riga e carattere per carattere:

  • stringa fgets (file int, lunghezza int)– la funzione legge una stringa di lunghezza lunghezza . Esempio:

  • stringa fread (int file, int lunghezza)- l'azione è identica alla precedente.

Esistono due funzioni identiche per scrivere dati di testo in un file:

  • int fputs (int file, string string [, int length])
  • int fwrite (int file, string string [, int length])

Le funzioni scrivono nel file int file una stringa string string della lunghezza specificata int length ( argomento facoltativo). Esempio:

Creazione ed eliminazione di file

Per creare un file php è possibile utilizzare la funzione fopen() in modalità di accesso "w" o "w+". O la funzione touch(). Imposta l'ora di modifica del file. Se non è presente alcun elemento con il nome cercato, verrà creato. La sua sintassi.




Superiore