Saya memiliki situs web yang setiap kali pengguna log in atau log out saya menyimpannya ke file teks.
Kode saya tidak berfungsi dalam menambahkan data atau membuat file teks jika tidak ada .. Berikut adalah contoh kode
$myfile = fopen("logs.txt", "wr") or die("Unable to open file!");
$txt = "user id date";
fwrite($myfile, $txt);
fclose($myfile);
Sepertinya tidak ditambahkan ke baris berikutnya setelah saya buka lagi.
Juga saya pikir itu juga akan memiliki kesalahan dalam situasi ketika 2 pengguna masuk pada saat yang sama, apakah akan mempengaruhi membuka file teks dan menyimpannya setelah itu?
logs.txt
dan menambahkan konten di dalamnyaGunakan
a
mode. Itu singkatanappend
.sumber
a
bendera akan membuat file jika tidak ada dan tidak ada yang akan peduli apa pastikan bahwa Anda benar-benarappend
teks baru. Untuk\n
itu berfungsi tetapi hanya jika di dalam tanda kutip ganda"
bukan tanda kutip tunggal'
Anda dapat melakukannya dengan cara OO, hanya sebuah alternatif dan fleksibel:
Kemudian gunakan seperti ini .. katakanlah Anda telah
user_name
menyimpan dalam satu sesi (kode semi pseudo):Periksa log Anda dengan ini:
Hasilnya seperti:
github.com/thielicious/Logger
sumber
sumber
Coba kode ini:
Saya selalu menggunakannya seperti ini, dan berfungsi ...
sumber
(!file_exists($logPath)) ? 'w':'a'
-a
opsi sudah memiliki perilaku yang benar ketika file tidak ada. Jadi dapat menyederhanakan jawaban ini dengan menghapus baris$mode = ...;
, dan mengubah baris berikutnya menjadi$logfile = fopen($logPath, 'a');
.Tidak ada mode buka file seperti "wr" dalam kode Anda:
Mode buka file di PHP http://php.net/manual/en/function.fopen.php sama dengan di C: http://www.cplusplus.com/reference/cstdio/fopen/
Ada mode terbuka utama berikut "r" untuk dibaca, "w" untuk menulis dan "a" untuk ditambahkan, dan Anda tidak dapat menggabungkannya. Anda dapat menambahkan pengubah lain seperti "+" untuk pembaruan, "b" untuk biner. Standar C baru menambahkan subspecifier standar baru ("x"), didukung oleh PHP, yang dapat ditambahkan ke specifier "w" (untuk membentuk "wx", "wbx", "w + x" atau "w + bx "/" wb + x "). Subspecifier ini memaksa fungsi gagal jika file ada, alih-alih menimpanya.
Selain itu, di PHP 5.2.6, mode buka utama 'c' ditambahkan. Anda tidak dapat menggabungkan 'c' dengan 'a', 'r', 'w'. 'C' membuka file hanya untuk menulis. Jika file tidak ada, itu dibuat. Jika ada, maka tidak terpotong (tidak seperti 'w'), atau panggilan ke fungsi ini gagal (seperti halnya dengan 'x'). 'c +' Buka file untuk membaca dan menulis; selain itu ia memiliki perilaku yang sama dengan 'c'.
Selain itu, dan dalam PHP 7.1.2 opsi 'e' ditambahkan yang dapat dikombinasikan dengan mode lainnya. Ini mengatur flag close-on-exec pada deskriptor file yang dibuka. Hanya tersedia di PHP yang dikompilasi pada sistem yang sesuai POSIX.1-2008.
Jadi, untuk tugas seperti yang Anda gambarkan, mode buka file terbaik adalah 'a'. Ini membuka file hanya untuk menulis. Ini menempatkan penunjuk file di akhir file. Jika file tidak ada, ia mencoba membuatnya. Dalam mode ini, fseek () tidak berpengaruh, menulis selalu ditambahkan.
Inilah yang Anda butuhkan, sebagaimana telah disebutkan di atas:
sumber
Meskipun ada banyak cara untuk melakukan ini. Tetapi jika Anda ingin melakukannya dengan cara yang mudah dan ingin memformat teks sebelum menulisnya ke file log. Anda dapat membuat fungsi pembantu untuk ini.
sumber