37

I was wondering how to save PHP variables to a txt file and then retrieve them again.

Example:

There is an input box, after submitted the stuff that was written in the input box will be saved to a text file. Later on the results need to be brought back as a variable. So lets say the variable is $text I need that to be saved to a text file and be able to retrieve it back again.

Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Aadi
  • 6,959
  • 28
  • 100
  • 145

7 Answers7

68

This should do what you want, but without more context I can't tell for sure.

Writing $text to a file:

$text = "Anything";
$var_str = var_export($text, true);
$var = "<?php\n\n\$text = $var_str;\n\n?>";
file_put_contents('filename.php', $var);

Retrieving it again:

include 'filename.php';
echo $text;
SwissCodeMen
  • 4,222
  • 8
  • 24
  • 34
Sandeep Shetty
  • 1,232
  • 9
  • 8
50

Personally, I'd use file_put_contents and file_get_contents (these are wrappers for fopen, fputs, etc).

Also, if you are going to write any structured data, such as arrays, I suggest you serialize and unserialize the files contents.

$file = '/tmp/file';
$content = serialize($my_variable);
file_put_contents($file, $content);
$content = unserialize(file_get_contents($file));
Christian
  • 3,917
  • 2
  • 23
  • 40
  • 1
    alternate approach: http://stackoverflow.com/questions/2237291/php-reading-file/2237315#2237315 – Gordon Jun 08 '10 at 08:11
7

(Sorry I can't comment just yet, otherwise I would)

To add to Christian's answer you might consider using json_encode and json_decode instead of serialize and unserialize to keep you safe. See a warning from the PHP man page:

Warning

Do not pass untrusted user input to unserialize(). Unserialization can result in code being loaded and executed due to object instantiation and autoloading, and a malicious user may be able to exploit this. Use a safe, standard data interchange format such as JSON (via json_decode() and json_encode()) if you need to pass serialized data to the user.

So your final solution might have the following:

$file = '/tmp/file';
$content = json_encode($my_variable);
file_put_contents($file, $content);
$content = json_decode(file_get_contents($file), TRUE);
duckboy81
  • 306
  • 2
  • 13
3

for_example, you have anyFile.php, and there is written $any_variable='hi Frank';

to change that variable to hi Jack, use like the following code:

<?php
$content = file_get_contents('anyFile.php'); 

$new_content = preg_replace('/\$any_variable=\"(.*?)\";/', '$any_variable="hi Jack";', $content);

file_put_contents('anyFile.php', $new_content);
?>
T.Todua
  • 53,146
  • 19
  • 236
  • 237
0

Use serialize() on the variable, then save the string to a file. later you will be able to read the serialed var from the file and rebuilt the original var (wether it was a string or an array or an object)

Rahil Wazir
  • 10,007
  • 11
  • 42
  • 64
MarcoSpada
  • 53
  • 6
0

Use a combination of of fopen, fwrite and fread. PHP.net has excellent documentation and examples of each of them.

http://us2.php.net/manual/en/function.fopen.php
http://us2.php.net/manual/en/function.fwrite.php
http://us2.php.net/manual/en/function.fread.php

Kerry Jones
  • 21,806
  • 12
  • 62
  • 89
  • Thank you for your caring.Unfortunately, I think you don't get me. – Aadi Jun 08 '10 at 07:37
  • 1
    There is no problem with the references.Which is very helpful.Thank you once again.But, this is not actually what I am looking for. – Aadi Jun 08 '10 at 07:47
  • You asked for a way to write contents to a find (fwrite) and a way to read it back into a variable (fread) I personally agree that Christian's answer is better, but this does the same thing. – Kerry Jones Jun 08 '10 at 07:48
  • Ajith, if my answer solved your question, then this one would have also as 'file_put_contents' is simply a wrapper function for the functions in Kerry's answer. Perhaps we both misunderstood though? – Christian Jun 08 '10 at 07:50
  • 3
    You have to put more effort in describing what you want then if none of the suggestions here help. – Helen Neely Jun 08 '10 at 07:51
0

Okay, so I needed a solution to this, and I borrowed heavily from the answers to this question and made a library: https://github.com/rahuldottech/varDx (Licensed under the MIT license).

It uses serialize() and unserialize() and writes data to a file. It can read and write multiple objects/variables/whatever to and from the same file.

Usage:

<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file
$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file

See the github page for more information. It has functions to read, write, check, modify and delete data.

Woody
  • 1,449
  • 3
  • 19
  • 27
undo
  • 257
  • 3
  • 19