1. Halo Guest, pastikan Anda selalu menaati peraturan forum sebelum mengirimkan post atau thread baru.

[ask] file_put_content menambahkan ke lines nomor 2

Discussion in 'Pemrograman Web' started by rexa5512, Jan 12, 2015.

  1. rexa5512

    rexa5512 Ads.id Fan

    Joined:
    Apr 27, 2011
    Messages:
    111
    Likes Received:
    1
    Location:
    pontianak
    permisi mastah.
    saya sudah cari di google dan search engine lainnya. tetapi masih belum saya temukan jawaban nya. terus terang saya hanya pemula dalam php,
    saya ingin bertanya tentang file_put_content

    saya mempunyai beberapa kode php seperti ini

    PHP:
    $kata 'selamat datang';
    $kata .= "\r\n".file_get_contents('welcome.txt');
    file_put_contents('welcome.txt'$kata);

    yang saya ingin tanyakan adalah, bagaimana menempatkan file ke line no 2 di welcome.text

    jadi jika setiap file akan langsung masuk ke lines no 2 tanpa mengganti file yang sebelumnya.

    mohon bantuan nya mastah sedikit ilmu yang mastah berikan sangat bermanfaat bagi saya. :pusing:
     
  2. punxs

    punxs musuhnya google

    Joined:
    Dec 9, 2010
    Messages:
    448
    Likes Received:
    48
    Location:
    Di Depan Mu
    PHP:
    $kata 'selamat datang';
    $hasil fopen('welcome.txt''a');
    fputs($hasil$kata."\n");
    fclose($hasil);
     
    rexa5512 likes this.
  3. rexa5512

    rexa5512 Ads.id Fan

    Joined:
    Apr 27, 2011
    Messages:
    111
    Likes Received:
    1
    Location:
    pontianak
    terima kasih mastah langsung coba ke TKP
     
  4. MalingJanda

    MalingJanda Newbie

    Joined:
    Oct 24, 2012
    Messages:
    26
    Likes Received:
    2
    Location:
    Indonesia,
    $kata = 'selamat datang';
    $kata .= "\r\n".file_get_contents('welcome.txt');
    file_put_contents('welcome.txt', $kata , FILE_APPEND | LOCK_EX);

    Penambahnya pada baris yang paling bawah. salah kali yaa.
     
  5. mp3online

    mp3online Super Hero

    Joined:
    Jul 19, 2011
    Messages:
    2,228
    Likes Received:
    294
    Location:
    jakarta
    kalo maksudnya berapapun jumlah baris tetap dimasukkan kecbaris no 2, maka metode di atas gak bs dipake, krn yg itu akan menambah di akhir baris.
    solusinya dibuka dulu pake fungsi files
    hasilnya berupa array,
    terus array[0] .= "\r\nkata baru";
    terus implode pake "\r\n"
    terus fopen pake w, baru di fwrite atau fputs
     
  6. mp3online

    mp3online Super Hero

    Joined:
    Jul 19, 2011
    Messages:
    2,228
    Likes Received:
    294
    Location:
    jakarta
    sory tadi pake hp, jadi males bikin contoh filenya :)

    contoh:
    misal isi file welcome.txt kayak gini
    1
    3
    4
    5

    kita mau menyisipkan angka 2 di baris ke 2
    PHP:
    <?php
    $kata 
    '2';
    $data file('welcome.txt');
    $data[0] .= $kata;
    $data implode("\r\n"$data);

    $tulis fopen('welcome.txt''w');
    fwrite($tulis,$data);
    fclose($tulis);
    ?>
     
  7. rexa5512

    rexa5512 Ads.id Fan

    Joined:
    Apr 27, 2011
    Messages:
    111
    Likes Received:
    1
    Location:
    pontianak
    terima masih mastah atas bantuan nya.. saya langsung cobain :)
     
  8. kchild

    kchild Ads.id Pro

    Joined:
    Dec 31, 2014
    Messages:
    368
    Likes Received:
    8
    Ribet amat gan? saya sarankan pake json aja gan.
    PHP:
    $lama json_decode(file_get_contents('welcome.json'), true);
    $kata = array('selamat datang'$lama[1]);
    file_put_contents('welcome.json'json_encode($kata));
     
  9. mp3online

    mp3online Super Hero

    Joined:
    Jul 19, 2011
    Messages:
    2,228
    Likes Received:
    294
    Location:
    jakarta
    tapi kayaknya yg dimaksud ts gak sesimple itu mastah
    "jadi jika setiap file akan langsung masuk ke lines no 2 tanpa mengganti file yang sebelumnya" kalau aku gak gagal paham, yg dimaksud ts apapun datanya, maka data yg baru akan dimasukkan jadi no 2 dan kayaknya nantinya hasil datanya gak cuma 2 baris, krn kalo cuma 2 baris pasti ts gak akan bingung :D

    katakanlah datanya berupa urutan angka dlm bentuk json ["1","3","4","5"], ts ingin datanya ditambah angka 2 menjadi ["1","2","3","4","5"],
    atau kalo data lamanya ["1","2","3","4","5"] misal ada data baru angka 10 maka datanya jd ["1","10","2","3","4","5"] dan akan bergeser semacam itu seterusnya setiap ada data baru.
    kalau pake script mastah kchild, hasil datanya menjadi ["2","3"] dan ["10", "2"] sebagian data ilang.

    nah kalau datanya baru ada 1 katakanlah json ["1"] mau dirubah jadi ["1","2"], maka script mastah kchild akan keluar error undefined ofset 1 dan hasilnya jg jd ["2",null]
    dan setelah itu setiap ada penambahan data baru hasilnya akan selalu ["data baru", null]
     
  10. nnttoo

    nnttoo Super Hero

    Joined:
    Apr 16, 2010
    Messages:
    1,260
    Likes Received:
    620
    Dengan di load data kedalam string kemudian di explode seperti yang agan-agan di atas sudah sampaikan itu akan bekerja,tapi
    Untuk file yang ukurannya besar, ini akan memakan ram, dan explode juga makan cukup banyak resource karena prosesor akan memeriksa string tiap karakter.. untuk file yang ukurannya kecil tentu ini tidak masalah, tapi kalau yang mau di tulis ukurannya besar tentu akan jadi masalah,,
    Jadi untuk file yang ukurannya besar gunakan methode ini..



    PHP:
    $file_path "fileku.txt";
    $tempfile $file_path '.temp';
    $kata 'selamat datang';

    $fileopen fopen($file_path "r");
    $filesave fopen($tempfile'w'); 

    $hitung 0;

    if (
    $fileopen) {
        while ((
    $line fgets($fileopen)) !== false) {
            
    $line = ($hitung == 1)? $kata "\n":$line;
            
    fwrite($filesave$line);

            
    $hitung++;

        }
        
    fclose($fileopen);



    fclose($filesave);
    unlink($file_path);
    rename($tempfile,$file_path);


    File asli di load line by line kedalam file temp, kemudian di write "line by line" sambil membaca dari file asli,, artinya String yang ada dalam ram cuma satu baris satu baris,, ketika baris berada di posisi dua, maka text di ganti dengan yang agan inginkan.. setelah proses selesai, file utama di hapus dan file temp di rename..

    Nah kalau agan tidak meau menggunakan file temp,, agan bisa read line dan masukan kedalam string

    misalkan seperti ini..
    PHP:
    $file_path "fileku.txt"
    $kata 'selamat datang';

    $fileopen fopen($file_path "r"); 
    $string_towrite "";
    $hitung 0;

    if (
    $fileopen) {
        while ((
    $line fgets($fileopen)) !== false) {
            
    $line = ($hitung == 1)? $kata "\n":$line;
            
    $string_towrite .= $line;
            
    $hitung++;
        }
        
    fclose($fileopen);

    file_put_contents($file_path$string_towrite);
    Cara yang kedua ini juga meskipun sama-sama di load ke String, tetap lebih hemat resource dibandingin pake explode.. karena prosesor hanya memeriksa tiap line bukan tiap karakter.

    UPdate:
    Karena setelah saya cermati lagi, ternyata ada kata "tanpa merubah file yang ada", mungkin maksudnya file yang ada gak di otak-atik, tidak di load ke sistem cukup nulis di baris ke 2 aja,,

    agan bisa gunakan ini.. gunakan argument r+ di fopen (itu intinya)...

    PHP:
    $file_path "fileku.txt"
    $kata 'selamat datang';

    $fileopen fopen($file_path "r+"); 
    fgets($fileopen); 
    fwrite($fileopen,$kata "\n" );
    fclose($fileopen);

    Agan call fgets beberapa kali sesuai baris yang diinginkan, karena agan mintanya baris 2 makanya cukup di call sekali,, agan bisa call fgets pake while kalau nomor lainnya banyak ..

    Agan juga bisa gunakan SplFileObject tapi ingat ini hanya work di php 5
    Agan bisa pake fseek untuk menuju ke line ,, nah karena agan mintanya ke line 2 maka disitu seek(0) artinya menuju baris ke 1 kemudian di tulis, jadi tulisannya akaan ada di baris ke 2...

    PHP:
    $file_path "fileku.txt"
    $kata 'selamat datang';
    $file = new SplFileObject($file_path,'r+');
    $file->seek(0);  $file->fwrite($kata  "\n");
    $file->fflush();
     
    Last edited: Jun 9, 2015
    imingfuntwo likes this.

Share This Page