Usando php, come inserire testo senza sovrascrivere all'inizio di un file di testo

StackOverflow https://stackoverflow.com/questions/103593

  •  01-07-2019
  •  | 
  •  

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?

È stato utile?

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

La libreria del compositore è disponibile qui

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); ?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top