Newsgroup: it.comp.www.php
Titolo: fopen/fwrite un problema!

Ho un problema che non riesco a risolvere!
Mediante una form inserisco dei valori in un file txt.
$filename = 'pippo.txt';
$contenuto = "testo da inserire nella prima riga";
$handle=fopen($filename,"r+");
fwrite($handle, $contenuto);
fclose($handle);
Al secondo passaggio, vorrei inserire una seconda riga, che si dovrà 
posizionare in cima a tutte le altre già presenti!
In sostanza, prima di inserire la seconda riga, devo poter in qualche modo 
mandare "a capo" quanto già dentro il file pippo.txt, altrimenti mediante 
$handle=fopen($filename,"r+"); e poi fwrite() sovrascrivo il contenuto di 
pippo.txt partendo dalla prima riga
Spero di essere stato chiaro.
L'output deve essere:
step1: nel file pippo.txt
Prima riga
step2: nel file pippo.txt
Seconda riga
Prima riga
e così via.
Un append "al contrario"...
Help! Tnx!
--
Gregor 

 posizionare in cima a tutte le altre gi` presenti!
Per prima cosa, sei cosciente che non sia una grande idea (in termini
di facilita' d'uso etc)?
Comunque ha due alternative:
- se il file e' piccolo, puoi caricare in memoria tutto il contenuto
del file originale, aggiungervi all'inizio la stringa che ti interessa
e salvare nuovamente il file.
- se il file e' grande, devi creare uno script che provveda a
"spostare" il contenuto "avanti" di tanti byte quanti sono quelli che
vuoi inserire prima di inserirli realmente all'inizio dello script.
La seconda soluzione puo' essere ottenuto tramite
http://www.php.net/fseek
 .
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

 
http://www.php.net/fseek
 .
Tnx! Do un'occhiata.
--
Gregor 

 
http://www.php.net/fseek
 .
Intendi l'uso di
fseek($fp, 0); o equivalentemente rewind($fp); ?
Non è il puntatore il problema, ma il fatto che una volta che parto 
dall'inizio del file a scrivere, in realtà sovrascrivo, mentre io vorrei 
mandare a capo quanto c'è già nel file, per "far posto" ai nuovi dati.
--
Gregor 


un'idea potrebbe essere quella di creare un file di appoggio, inserire il
nuovo dato, aprire l'altro file e leggerlo e scriverlo nel nuovo file riga
per riga, infine cancellare il vecchio e rinominare il nuovo...
V


Non conosco il php ma questo e' un "problema" che prescinde dal linguaggio.
Quello che farei io in una situazione "molto" dinamica e massiva
1) scriverei in fondo poiche', credo, e' sempre possibile leggere un 
file "reversed" (io farei di peggio ma non mi dilungo).
2) I dati li terrei comunque in memoria a livello di "application" 
intendo l'area global visibile a tutti gli utenti per il loro uso e 
farei l'aggiornamento in concomitanza con la scrittura del file
In questa ipotesi non e' nemmeno necessario leggere "reversed" il file, 
si  legge reversed l'area di memoria (arrayzzata o meno) questo lo 
lascio agli esperti di performances.
3) Il caricamento dell'area di applicazione (in altri contesti si 
parlerebbe di singleton o bean statico), se si puo, dovrebbe farlo 
l'"application server" alla sua partenza o dovrebbe essere a carico del 
primo che si collega (se richiede tempo, ma non credo) gli altri aspettano.
5) A occhio na robetta di una ventina di istruzioni.
6) Un file di "dizionario" (a quello che ho capito) non dovrebbe 
raggiungere dimensioni da sturbo.
-- 
ac
y-1=x

 Intendi l'uso di fseek($fp, 0); o equivalentemente rewind($fp); ?
No, la soluzione proposta per capire come utilizzare fseek() per
spostarti all'interno del file.


 raggiungere dimensioni da sturbo.
A me non sembra proprio un file "dizionario" visto che si tratta di
serie di dati inserite dall'utente secondo necessita'.


 
-- 
ac
y-1=x

 provare a cercarle.
Preferirei vederle scritte in PHP visto che siamo su it.comp.www.php.


 l'ambiente in cui andra' eseguito.
L'ambiente in cui verra' eseguito e' un ambiente in cui c'e' un server 
(web) che legge un file e lo manda al client dopo sua richiesta. Se il 
file richiesto ha una estensione non trattabile dal web server ma 
trattabile da un suo helper chiama il suo helper (che esegue 
applicazioni) e gli chiede cortesemente di prendesi carico della 
richiesta e restituirgli un file html con in mezzo, se richiesto, del 
codice javascript da eseguire sul cliente. "samtaims" tutto cio' viene 
fatto dalla stessa componente ma "arisamtaims" no. Una volta fatto 
questo il web server si scorda del tutto a meno che non gli si richieda 
di fare nodi al fazzoletto (i.e. conservare informazioni per una 
successiva chiamata)
Tali informazioni possono essere legate a quel client (sessione) o 
fruibili da tutti coloro che ne potranno abbisognare (applicazione).
Esistono delle informazioni che sono talmente poco movimentate e di 
utilizzo generale che e' "non utile" rielaborarle ogni volta. In questi 
casi si cerca di renderle fruibili a "tutti" nel modo piu' veloce e meno 
dispendioso possibile. Tutti i sistemi di "chescing" tendono a questo.
Tutto cio' perche' comincio a pensare che sei il classico "savant 
sauvage". E l'"apolidita'" (trovata scritta su un php manual in italiano 
  come traduzione di "stateless")  sia una roba che non ti e' molto 
chiara. Forse al contrario di quello che tu posssa pensare sono molto 
cosciente che l'acqua calda e' stata inventata da molto tempo e quando 
ancora non c'erano i PC esistevano sistemi sotto i "mainframes" che 
ragionavano esattamente nello stesso modo. L'informatica e' una vecchia 
canzone che recitava pressappoco "c'e' da spostare una macchina da qui 
mettila la'..." la macchina puo' essere un Diesel o meno ma sempre da 
una parte all'altra si deve spostare.
La mia pazienza e' finita. Dalla prossima volta, se ci sara', al primo 
aggettivo fuori luogo avrai risposte meno tolleranti.
Una distinta base e' tutto tranne una base dati, altrimenti si 
chiamerebbe base dati e non distinta base.
[cut]
-- 
ac
y-1=x

 dispendioso possibile. Tutti i sistemi di "chescing" tendono a questo.
Caching non e` la stessa cosa di application server.
In PHP puoi fare caching in sessione, su file, su database, ma non in 
variabili application.
 
Bye.

 Bye.
saluti e ringrazio per l'intervento.
-- 
ac
y-1=x

 Ma la sessione in contesto PHP non e' legata al singolo client? 
Si.


 altrimenti si chiamerebbe base dati e non distinta base.
Potresti quotare il messaggio dove ho scritto che una distinta base e'
una base dati?


 rinominare il nuovo...
Proverò a percorrere questa strada.
Grazie a tutti per gli interventi.
--
Gregor 

 rinominare il nuovo...
Ho risolto proprio in questo modo.
Grazie!
--
Gregor