Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [PHP] scrittura "richiesta da più client" di un file txt

    Ciao a tutti,
    mi rivolgo ancora una volta a voi per cercare di trovare la soluzione ad un problema .

    Ho una funzione php che preleva dei dati da un database MySQL e li stampa in una tabella su video. Io vorrei che contemporaneamente alla stampa dei dati su video avvenga anche una stampa degli stessi dati su un file di testo.

    A questo punto mi son posto il seguente problema:
    visto che i dati da visualizzare potrebbero essere molti (migliaia di righe), come si comporta il web-server(apache) se gli arriva un'altra richiesta (da parte di un altro client) di generare una seconda tabella (sia su schermo che su file)?

    Se apache serve i due client in contemporanea non dovrei aver problemi nella visualizzazione sui browser (sono distinti!) dei due client ma potrei avrei problemi con la scrittura del file di testo (uso lo stesso nome per il file txt)?

    spero di non aver fatto troppa confusione nella spiegazione.

    Grazie
    RiKkArDo on IRCnet

  2. #2
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    In regime concorrente non puoi infatti usare uno stesso file in scrittura in quel modo...

    Apri un file in scrittura su Windows e prova a cancellarlo... Se ti riesce. E' la stessa cosa.

    Sei sicuro di doverlo fare? Si possono trovare barbatrucchi al limite...

    [.:: JaguarXF ::.]
    __________________

  3. #3
    Infatti un barbatrucco è quello di generare dei nomi file random ad ogni richiesta da parte di un client. Qua il problema che mi si pone è quello di come fare a cancellare tali file dopo che essi sono stati scaricati da parte dell'utente. Chessò si può far in modo che il file venga cancellato dopo un tot di tempo?
    RiKkArDo on IRCnet

  4. #4
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Ah beh, questo è un altro paio di maniche.

    Si può fare si e no.

    No nel senso che PHP non è un demone che "si attiva" quando gli pare.

    Si perchè puoi simularlo questo demone, ovvero in qualche tuo script inserisci una funzione di pulitura file, ovvio che te la devi gestire tu (io mi appoggerei ad un db per il timestamp, in modo da non dover leggere mai su disco).

    Non so se mi sono spiegato a sufficienza.


    [.:: JaguarXF ::.]
    __________________

  5. #5
    In effetti mi era venuta l'idea di appoggiarmi ad un DB per salvare i nomi dei file temporanei creati. Così da riuscire a cancellare con uno script "nascosto" da qualche parte fra le pagine di navigazione i file "vecchi".

    Mi spiego meglio:

    nella pagina in cui vi è lo script php che genera i file di testo potrei inserire un parte di codice che si occupa di controllare se su disco sono presenti file txt vecchi (ad esempio del giorno prima).
    Ogni volta che scrivo un file txt genero un nome random e salvo in una tabella di un DB nomefile e data.

    che dici?
    RiKkArDo on IRCnet

  6. #6
    se li crei tutti dentro la stessa cartella può bastare dare dei nomi random con suffisso .__tmp__

    al php non serve sapere l' estensione per intenderci e li tratterà comunque come files di testo.

    Saltuariamente o quando c'e' un solo utente, prima di creare il suo file col nome univoco farai una cosa tipo

    codice:
    $files = glob('cartella/*.__tmp__');
    for($a = 0, $b = count($files); $a < $b; $a++)
    	unlink($files[$a]);
    ... poi crei il suo files, cosi' il tutto è abbastanza automatizzato.

    altro metodo per la pulizia è usare la data di creazione, se superiore di tot tempo la elimini.

    codice:
    // dopo quanti giorni cancellare i files ?
    $giorni = 5;
    
    // tempo oltre il quale i files vengono cancellati
    $expiration = time() - ( 60 * 60 * 24 * $giorni );
    
    // lista files
    $files = glob('cartella/*.__tmp__');
    
    // ciclo sulla lista
    for($a = 0, $b = count($files); $a < $b; $a++) {
    
    	// se il file è più vecchio di $giorni giorni
    	if(filectime($files[$a]) < $expiration)
    
    		// lo cancello
    		unlink($files[$a]);
    }
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    grazie andr3a per il suggerimento. Sì avrei intenzione di salvare i files tutti all'interno di una stessa cartella. La tua seconda soluzione credo faccia al caso mio perchè io ho spesso più utenti che contemporaneamente richiedono la scrittura del file di testo.
    Al solito vedo che usi funzioni delle quali io non ne conoscevo l'esistenza.

    Per quanto riguarda la generazione del nome random ho visto che in php c'è la funzione mt_rand(). potrei usare questa ottenendo nomi file di testo del tipo

    1604716014.txt
    1478613278.txt

    ??

    Noterai che ho lasciato l'estensione .txt in quanto ho necessità che l'utente che andrà a scaricare il file trovi l'estensione corretta.
    RiKkArDo on IRCnet

  8. #8

  9. #9
    grazie mille gm

    avevo visto quei thread però m'era sembrato di capire che flock() non funzionasse su tutti i file system quindi volevo sapere se nel mio caso vi era una soluzione migliore.
    RiKkArDo on IRCnet

  10. #10
    per il nome puoi usare

    $filename = md5(uniqid(rand(), true)).'.__tmp__';


    per il file, locks ed altro miero scordato di questa
    http://www.devpro.it/php4_id_101.html
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.