PHP ile Dosyanın başında yazmak gerekiyor

6 Cevap php

Ben bu programı yapıyorum ve oldukça ucundan daha bir dosyanın başlangıcına veri yazmak için öğrenmek için çalışıyorum. "A" / append sadece nasıl ben bunu başından yazma yapabilir, sonuna kadar yazar? "R +" bunu yapar ama önceki verilerin üzerine yazar çünkü.

$datab = fopen('database.txt', "r+");

İşte benim bütün dosya:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Facebook v0.1</title>
        <style type="text/css">
            #bod{
                margin:0 auto;
                width:800px;
                border:solid 2px black;
            }
        </style>
    </head>

    <body>
        <div id="bod">
            <?php
                $fname = $_REQUEST['fname'];
                $lname = $_REQUEST['lname'];
                $comment = $_REQUEST['comment'];
                $datab = $_REQUEST['datab'];
                $gfile = $_REQUEST['gfile'];

                print <<<form
                <table border="2" style="margin:0 auto;">
                    <td>
                        <form method="post"  action="">
                              First Name :
                              <input type ="text"
                                         name="fname"
                                         value="">
                              <br>

                              Last Name :
                                <input type ="text"
                                         name="lname"
                                         value="">
                              <br>

                              Comment :
                              <input type ="text"
                                         name="comment"
                                         value="">
                              <br>
                              <input type ="submit" value="Submit">
                        </form>
                    </td>
                </table>
                form;
                if((!empty($fname)) && (!empty($lname)) && (!empty($comment))){
                    $form = <<<come

                    <table border='2' width='300px' style="margin:0 auto;">
                        <tr>
                            <td>
                                <span style="color:blue; font-weight:bold;">
                                $fname $lname :
                                </span>

                                $comment
                            </td>
                        </tr>
                    </table>
                    come;

                    $datab = fopen('database.txt', "r+");
                    fputs($datab, $form);
                    fclose($datab);

                }else if((empty($fname)) && (empty($lname)) && (empty($comment))){
                    print" please input data";
                } // end table

                $datab = fopen('database.txt', "r");

                while (!feof($datab)){
                    $gfile = fgets($datab);
                    print "$gfile";
                }// end of while
            ?>
        </div>
    </body>
</html>

6 Cevap

Hızlı ve kirli:

<?php
$file_data = "Stuff you want to add\n";
$file_data .= file_get_contents('database.txt');
file_put_contents('database.txt', $file_data);
?>

Eğer bir değişken dosyanın içeriğini yüklemek istemiyorsanız, this blog entry bakabilirsiniz. Bu geçici bir dosya ve akarsuları (PHP5 + sadece) kullanan bir sona ekleme () işlevi için kodu verir.

function prepend($string, $filename) {
  $context = stream_context_create();
  $fp = fopen($filename, 'r', 1, $context);
  $tmpname = md5($string);
  file_put_contents($tmpname, $string);
  file_put_contents($tmpname, $fp, FILE_APPEND);
  fclose($fp);
  unlink($filename);
  rename($tmpname, $filename);
}

Daha spesifik olmak gerekirse, o zaman, bir geçici dosyaya prepend istediğiniz dize, o zaman (yerine bir değişken tüm dosya kopyalama akışları kullanarak) geçici dosya ucuna orijinal dosyanın içeriğini yazar yazar orijinal dosyayı kaldırır ve yerine geçici dosyayı yeniden adlandırır.

Ben ne yapabilirim ilk dosyanın içeriğini okumak ve geçici bir değişken tutun, şimdi de geçici değişkenin içeriğini eklemeden önce dosyanın başlangıcına yeni veri eklemek olduğunu düşünüyorum.

$file = file_get_contents($filename);
$content = 'Your Content' . $file;
file_put_contents($content);  

Eğer düşünmek gibi bir dosyanın başlangıcına yazmak için yolu artık yoktur. Bu benim işletim sistemi ve HDD dosyayı görüyor akıl nedeniyle sanırım olduğunu. Bu sabit bir başlangıç ​​ve genişleyen sonu var. Eğer ortada bir şey eklemek istiyorsanız ya yalvarıyor eğer sürgülü bazı gerektirir. Küçük bir dosya ise sadece okuma ve manipülasyon yapmak ve geri yazmak. Ama değilse, ve her zaman başında sadece ters satır sırayla ekleyerek ise, başından sonuna gibi düşünün ...

Bu kod üzerine karşı onları korumak için dosyanın başından itibaren veri hatırlar. Sonraki o öbek öbek tarafından dosya mevcut tüm verileri yeniden yazar.

$data = "new stuff to insert at the beggining of the file";
$buffer_size = 10000;

$f = fopen("database.txt", "r+");
$old_data_size = strlen($data);
$old_data = fread($f, $old_data_size);
while($old_data_size > 0) {
  fseek($f, SEEK_CUR, -$old_data_size);
  fwrite($f, $data);
  $data = $old_data;
  $old_data = fread($f, $buffer_size);
  $old_data_size = strlen($data);
}
fclose($f);