Usando php, come inserire testo senza sovrascrivere all'inizio di un file di testo
Domanda
Ho:
<?php
$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");
if ( Ho:
<*>
ma sovrascrive l'inizio del file. Come faccio a inserirlo?
POST["lastname"] <> "")
{
fwrite($file, Ho:
<*>
ma sovrascrive l'inizio del file. Come faccio a inserirlo?
POST["lastname"]."\n");
}
fclose($file);
?>
ma sovrascrive l'inizio del file. Come faccio a inserirlo?
Soluzione
Non sono del tutto sicuro della tua domanda: vuoi scrivere i dati e non sovrascriverli all'inizio di un file esistente o scrivere nuovi dati all'inizio di un file esistente, mantenendo il contenuto esistente dopo vero?
Per inserire testo senza sovrascrivere l'inizio del file , dovrai aprirlo per accodarlo ( a +
anziché r +
)
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ( Non sono del tutto sicuro della tua domanda: vuoi scrivere i dati e non sovrascriverli all'inizio di un file esistente o scrivere nuovi dati all'inizio di un file esistente, mantenendo il contenuto esistente dopo vero?
Per inserire testo senza sovrascrivere l'inizio del file , dovrai aprirlo per accodarlo ( a +
anziché r +
)
$old_content = file_get_contents($file);
fwrite($file, $new_content."\n".$old_content);
Se stai cercando di scrivere all'inizio del file , dovrai leggere il contenuto del file (consulta file_get_contents
), quindi scrivi la nuova stringa seguita dal contenuto del file nel file di output.
<*>
L'approccio sopra funzionerà con file di piccole dimensioni, ma potresti imbatterti in limiti di memoria nel tentativo di leggere un file di grandi dimensioni usando file_get_conents
. In questo caso, considera l'utilizzo di rewind ($ file)
, che imposta il file indicatore di posizione per handle all'inizio del flusso di file.
Nota quando si utilizza rewind ()
, per non aprire il file con le opzioni a
(o a +
), come:
Se hai aperto il file in modalità append (" a " o " a + "), tutti i dati che scrivi nel file verranno sempre aggiunti, indipendentemente dalla posizione del file.
POST["lastname"] <> "")
{
fwrite($file, Non sono del tutto sicuro della tua domanda: vuoi scrivere i dati e non sovrascriverli all'inizio di un file esistente o scrivere nuovi dati all'inizio di un file esistente, mantenendo il contenuto esistente dopo vero?
Per inserire testo senza sovrascrivere l'inizio del file , dovrai aprirlo per accodarlo ( a +
anziché r +
)
<*>
Se stai cercando di scrivere all'inizio del file , dovrai leggere il contenuto del file (consulta file_get_contents
), quindi scrivi la nuova stringa seguita dal contenuto del file nel file di output.
<*>
L'approccio sopra funzionerà con file di piccole dimensioni, ma potresti imbatterti in limiti di memoria nel tentativo di leggere un file di grandi dimensioni usando file_get_conents
. In questo caso, considera l'utilizzo di rewind ($ file)
, che imposta il file indicatore di posizione per handle all'inizio del flusso di file.
Nota quando si utilizza rewind ()
, per non aprire il file con le opzioni a
(o a +
), come:
Se hai aperto il file in modalità append (" a " o " a + "), tutti i dati che scrivi nel file verranno sempre aggiunti, indipendentemente dalla posizione del file.
POST["lastname"]."\n");
}
fclose($file);
Se stai cercando di scrivere all'inizio del file , dovrai leggere il contenuto del file (consulta file_get_contents
), quindi scrivi la nuova stringa seguita dal contenuto del file nel file di output.
L'approccio sopra funzionerà con file di piccole dimensioni, ma potresti imbatterti in limiti di memoria nel tentativo di leggere un file di grandi dimensioni usando file_get_conents
. In questo caso, considera l'utilizzo di rewind ($ file)
, che imposta il file indicatore di posizione per handle all'inizio del flusso di file.
Nota quando si utilizza rewind ()
, per non aprire il file con le opzioni a
(o a +
), come:
Se hai aperto il file in modalità append (" a " o " a + "), tutti i dati che scrivi nel file verranno sempre aggiunti, indipendentemente dalla posizione del file.
Altri suggerimenti
Un esempio funzionante per l'inserimento nel mezzo di un flusso di file senza sovrascrivere e senza dover caricare tutto in una variabile / memoria:
function finsert($handle, $string, $bufferSize = 16384) {
$insertionPoint = ftell($handle);
// Create a temp file to stream into
$tempPath = tempnam(sys_get_temp_dir(), "file-chainer");
$lastPartHandle = fopen($tempPath, "w+");
// Read in everything from the insertion point and forward
while (!feof($handle)) {
fwrite($lastPartHandle, fread($handle, $bufferSize), $bufferSize);
}
// Rewind to the insertion point
fseek($handle, $insertionPoint);
// Rewind the temporary stream
rewind($lastPartHandle);
// Write back everything starting with the string to insert
fwrite($handle, $string);
while (!feof($lastPartHandle)) {
fwrite($handle, fread($lastPartHandle, $bufferSize), $bufferSize);
}
// Close the last part handle and delete it
fclose($lastPartHandle);
unlink($tempPath);
// Re-set pointer
fseek($handle, $insertionPoint + strlen($string));
}
$handle = fopen("file.txt", "w+");
fwrite($handle, "foobar");
rewind($handle);
finsert($handle, "baz");
// File stream is now: bazfoobar
Ottieni lo stesso aprendo il file per aggiungere
<?php
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ( Ottieni lo stesso aprendo il file per aggiungere
<*>POST["lastname"] <> "")
{
fwrite($file, Ottieni lo stesso aprendo il file per aggiungere
<*>POST["lastname"]."\n");
}
fclose($file);
?>
Se vuoi inserire il tuo testo all'inizio del file, dovresti prima leggere il contenuto del file come:
<?php
$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");
if ( Se vuoi inserire il tuo testo all'inizio del file, dovresti prima leggere il contenuto del file come:
<*>POST["lastname"] <> "")
{
$existingText = file_get_contents($file);
fwrite($file, $existingText . Se vuoi inserire il tuo testo all'inizio del file, dovresti prima leggere il contenuto del file come:
<*>POST["lastname"]."\n");
}
fclose($file);
?>