Search code examples
phpfileappend

How to append data to file using file_put_contents()?


I have an Android app that sends multiple data records using okhttp3, but I can't find a way to log all the data being received in PHP. My current log only shows the last record (see below). My best guess is that the PHP file is being overwritten with each new record, leaving only the last one.

How can I log all the data sent by the Android app in PHP?

And yes, all the data is being sent correctly from the Android app.

index.php

if (isset($_POST)) {
    file_put_contents("post.log", print_r($_POST, true));
}

Sample post.log

Array
(
    [date] => 02 Aug, 12:22
    [company] => Assert Ventures
    [lattitude] => 32.8937542
    [longitude] => -108.336584
    [user_id] => Malboro
    [photo_id] => 1
)

What I want:

I would like the log to keep all the records sent from the app, not just the last one. Something like this:

(
    [date] => 02 Aug, 12:22
    [company] => Three Ventures
    [lattitude] => 302.8937542
    [longitude] => -55.336584
    [user_id] => Malboro
    [photo_id] => 1
),
(
    [date] => 02 Aug, 12:22
    [company] => Two Ventures
    [lattitude] => 153.8937542
    [longitude] => -88.336584
    [user_id] => Malboro
    [photo_id] => 1
),
(
    [date] => 02 Aug, 12:22
    [company] => Assert Ventures
    [lattitude] => 32.8937542
    [longitude] => -108.336584
    [user_id] => Malboro
    [photo_id] => 1
)

Solution

  • You need to pass third parameter FILE_APPEND;

    So your PHP code will look something like this:

    if (isset($_POST)) {
        file_put_contents("post.log", print_r($_POST, true) . "\n", FILE_APPEND);
    }
    

    FILE_APPEND flag helps to append the content to the end of the file instead of overriding the content.

    This way, each time data is sent from your Android app, it will be appended to the post.log file, and all records will be preserved.