2013-05-16 46 views
5

Sono nuovo qui.
In ogni caso, ho effettuato le mie ricerche su fwrite(), ma non sono riuscito a trovare una soluzione, quindi chiedo aiuto. Quello che voglio è f.e. per aggiungere una nuova riga di testo dopo qualche altra linea specifica. F.e. Ho un file txt in cui c'è:PHP fwrite() come inserire una nuova riga dopo qualche riga specifica

//Users 

//Other stuff 

//Other stuff2 

Ora quello che mi piacerebbe fare è essere in grado di aggiungere un nuovo utente al di sotto // utenti senza toccare "altra roba" e "altra roba 2" . Così dovrebbe essere simile a questa:

//Users  
Aneszej 
Test321 
Test123 

//Other stuff 

//Other stuff2 

Quello che ho finora:

$config = 'test.txt'; 
$file=fopen($config,"r+") or exit("Unable to open file!"); 

$date = date("F j, Y"); 
$time = date("H:i:s"); 

$username = "user"; 
$password = "pass"; 
$email = "email"; 
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time; 

while (!feof($file)) { 
    $line=fgets($file); 
    if (strpos($line, '//Users')!==false) { 
     $newline = PHP_EOL . $newuser; 
    } 

} 

fwrite($file, $newline); 

fclose($file); 

file test.txt

//Users 

//Something Else 

//Something Else 2 

Ma questo scrive solo gli utenti alla fine del. file txt.

Grazie mille tutti per il vostro aiuto! È risolto

+0

Si può provare fseek – Hackerman

+0

penso che quando il tuo manipolazione di file inizia ad essere un po 'complesso, è necessario utilizzare un database. Prova SQLite, dovrebbe adattarsi perfettamente a te ... –

+0

Questo era solo un esempio, ho intenzione di usarlo per qualcos'altro. Grazie per le informazioni – Aneszej

risposta

5

ho modificato il codice, penso che segue è quello che ti serve, e ho anche messo commento, funzione qui sotto sarà continuare ad aggiungere nuovo utente, è possibile aggiungere condizione che per controllare utente esiste.

$config = 'test.txt'; 
$file=fopen($config,"r+") or exit("Unable to open file!"); 

$date = date("F j, Y"); 
$time = date("H:i:s"); 

$username = "user"; 
$password = "pass"; 
$email = "email"; 
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time."\r\n"; // I added new line after new user 
$insertPos=0; // variable for saving //Users position 
while (!feof($file)) { 
    $line=fgets($file); 
    if (strpos($line, '//Users')!==false) { 
     $insertPos=ftell($file); // ftell will tell the position where the pointer moved, here is the new line after //Users. 
     $newline = $newuser; 
    } else { 
     $newline.=$line; // append existing data with new data of user 
    } 
} 

fseek($file,$insertPos); // move pointer to the file position where we saved above 
fwrite($file, $newline); 

fclose($file); 
+0

Grazie mille funziona correttamente e proprio come volevo! E grazie per aver commentato cosa fa ogni cosa. – Aneszej

0

Scrivi il nuovo contenuto alla fine della lettura, quindi deve scrivere alla fine del file - il cursore è lì dopo aver letto tutte le righe.

O si memorizzano tutti i contenuti in php-variable e si sovrascrive il file alla fine, oppure si riavvolge il curser con fseek come accennato dal commento di Robert Rozas. Questo dovrebbe essere fatto non appena si legge la riga "Qualcos'altro".

0

È necessario break dopo aver trovato '// Users'. Continua a leggere fino alla fine del file.