将PHP变量保存到文本文件

37

我在思考如何将PHP变量保存到txt文件中,并再次检索它们。

例如:

有一个输入框,提交后输入框中的内容将被保存到文本文件中。稍后需要将结果作为变量重新引用。所以假设变量是$text,我需要将其保存到文本文件中,并能够再次检索它。


实际上,你不能保存一个变量,只能保存它的值。 - Your Common Sense
实际上,你可以保存变量,但不是以一种干净的方式。总是可以将变量压缩到数组中,稍后再使用 extract() 函数提取它们。 - Duroth
@Duroth 你说得非常正确。如果可以,请给我更多的想法。谢谢。 - Aadi
2
(附注)如果您只想在请求之间保留表单数据,请考虑使用会话。 - Gordon
所有的答案都回答了你的具体问题,但戈登是绝对正确的:它真的听起来像你想要会话。 - Paolo Bergantino
7个回答

67

这应该能够满足你的需求,但是没有更多的上下文信息我不能确定。

$text写入文件:

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

再次获取它:

include 'filename.php';
echo $text;

非常感谢您。您是个天才。实际上这正是我在寻找的...!!完美地运作着。再次感谢您,亲爱的朋友。 - Aadi
2
不好的方式,因为存在安全问题。你可能会包含一些有漏洞的代码。 - Michail M.
@mishanon 除了你以外,谁可以访问这个文件? - Valentin Tanasescu
2
请注意,返回值也是可能的:<?php return $var_str。然后您可以使用不同的名称来包含数据,例如$someText = (include 'filename.php'); - Nux

51

就我个人而言,我会使用file_put_contents和file_get_contents(它们是fopen,fputs等的封装器)。

此外,如果您要写入任何结构化数据,例如数组,我建议您对文件内容进行序列化和反序列化。

$file = '/tmp/file';
$content = serialize($my_variable);
file_put_contents($file, $content);
$content = unserialize(file_get_contents($file));

1
替代方法:https://dev59.com/uEvSa4cB1Zd3GeqPh-O8#2237315 - Gordon

7

抱歉,我现在无法发表评论,否则我会这样做。

除了Christian的答案之外,您还可以考虑使用json_encodejson_decode代替serializeunserialize来让您更加安全。PHP手册中有一个警告:

警告

不要将不受信任的用户输入传递给unserialize()。反序列化可能会导致代码被加载和执行,因为对象实例化和自动加载,而恶意用户可能会利用此漏洞。如果需要将序列化数据传递给用户,请使用安全的标准数据交换格式,例如JSON(通过json_decode()和json_encode())。

因此,您最终的解决方案可能如下所示:

$file = '/tmp/file';
$content = json_encode($my_variable);
file_put_contents($file, $content);
$content = json_decode(file_get_contents($file), TRUE);

3

例如,你有一个名为anyFile.php的文件,并且里面写着$any_variable='hi Frank';

要将该变量更改为hi Jack,请使用以下代码:

<?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 - bdalina

0
好的,所以我需要一个解决方案,然后我从这个问题的答案中大量借鉴,并制作了一个库:https://github.com/rahuldottech/varDx(根据 MIT 许可证获得许可)。
它使用serialize()unserialize() 将数据写入文件。它可以从同一文件读取和写入多个对象 / 变量 / 任何内容。
用法:
<?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

请查看 Github 页面以获取更多信息。它具有读取、写入、检查、修改和删除数据的功能。


0

谢谢你的关心。不幸的是,我认为你没有理解我。 - Aadi
1
参考文献没有问题,这非常有帮助。再次感谢您。但是,这实际上不是我正在寻找的。 - Aadi
你要求一种将内容写入查找(fwrite)并将其读回变量(fread)的方法。我个人认为Christian的答案更好,但这也可以实现同样的功能。 - Kerry Jones
Ajith,如果我的回答解决了你的问题,那么这个也会,因为'file_put_contents'只是Kerry答案中函数的包装函数。也许我们两个都误解了? - Christian
3
如果这里的任何建议都没有帮助,那么你需要更加努力地描述你想要的内容。 - Helen Neely

0

使用serialize()函数对变量进行序列化,然后将字符串保存到文件中。稍后您可以从文件中读取序列化的变量并重新构建原始变量(无论它是字符串、数组还是对象)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接