【问题标题】:how do i use php to read an external file and put insides into variables?如何使用 php 读取外部文件并将内部文件放入变量中?
【发布时间】:2009-08-18 13:50:35
【问题描述】:

我不知道如何正确地形成这个问题的标题,因为我什至不知道我正在尝试做的事情是否有名字。

假设我有一个外部文件(例如,称为 settings.txt),其中包含以下内容:

template:'xaddict';
editor:'true';
wysiwyg:'false';

这些是简单的名称:值对。 我想让 php 处理这个文件,最终得到具有以下值的 php 变量:

$template = 'xaddict';
$editor = 'true';
$wysiwyg = 'false';

我不知道我会有多少这些变量。

我应该怎么做?

文件中的数据是简单的名称:值对。没有嵌套,没有复杂的数据。所有的名字都需要转换为$name,所有的值都需要转换为'value',不管它是否真的是一个字符串。

【问题讨论】:

  • 您已经表明您正在做的不是 JSON,在这种情况下,您需要相当具体地了解文件的格式以及数据结构的复杂/嵌套程度。如果它只是简单的名称:值对,那是一回事,但如果它不是 JSON 并且是深度嵌套的数据结构,那就是另一回事了。
  • 只有名称:值对。不需要任何更复杂的东西。

标签: php json variables external


【解决方案1】:
$settings = json_decode(file_get_contents($filename));

假设您的文件采用有效的 JSON 格式。如果没有,您可以按摩它,否则您将不得不使用其他方法。

【讨论】:

  • 这样我必须创建一个有效的 JSON 文件,这意味着引入 {} 标签。我想远离它。
【解决方案2】:

您希望将“editor:'true'”中的“true”解释为字符串还是布尔值?如果有时是字符串,有时是布尔值,你怎么知道是哪个?

如果您有“number='9'”,您希望将 '9' 解释为字符串还是整数? '09' 是十进制数还是八进制数? “number='3.14'”怎么样:字符串还是浮点数?如果有时一个,有时另一个,你怎么知道哪个?

如果值中有“'”(单引号),它会被转义吗?如果有,怎么做?

对数组数据有什么期望吗?

等等

编辑:这是最简单的方式,imo,使用您的示例输入来检索您的示例数据:

$file = 'test.csv';
$fp = fopen($file, 'r');
while ($line = fgetcsv($fp, 1024, ':')) {
    $$line[0] = $line[1];
}

【讨论】:

  • 文件中唯一的内容是字符串('xaddict')、数字('9' 或 '9.16')和真/假文本值。我将尝试实现一种将所有值变成我想要的值的方法,但这不是现在的问题。以后关心的。可能我会将所有数字转换为双精度数(浮点数),无论它们是否为小数。
  • 加号。我在 php 中发现:'9.126' == 9.126。返回真。
  • 这是完美的。应该首先考虑逗号分隔值。谢谢大家!!!
  • 我很高兴它有帮助。不过,作为记录,我的问题旨在促使您考虑使用 JSON 之类的东西。 :)
【解决方案3】:

如果你使用 JSON,你可以使用类似的东西:

extract(json_decode(file_get_contents('settings.json')));

使用提取可能很危险,所以我建议将这些设置存储在一个数组中:

$settings = json_decode(file_get_contents('settings.json'));

【讨论】:

  • 这将创建 $settings["template"] 变量,但我正在尝试创建变量 $template。我不太关心 JSON,所以如果它可以在没有...的情况下完成,很高兴
  • 然后使用提取功能。它可以创建一个安全漏洞,但它会做你想做的事。
  • 如果你不想在你的文件中使用 {},你可以用 extract(json_decode('{'.file_get_contents('settings.json').'}') 模仿一个假的 json );
【解决方案4】:

您应该使用 file() 函数将文件读取到一个数组中,然后您应该在其上循环:对于每一行(file() 函数将返回一个数组,每个项目一行),检查该行是否不是空白的,然后对“:”字符进行explode(),修剪碎片,并将它们放入一个数组中。 你最终会赢得这样一个数组:

[template] = xaddict
[editor] = true

那么你就可以使用这些信息了。

不要自动将其转换为局部变量:这是一种引入安全风险的好方法,并且可能会出现非常隐蔽的错误(局部变量被此解析引入的那些隐蔽)。

【讨论】:

  • 可变变量是一种解决方案吗?像这样: $a = '模板'; $$a = 'xaddict';回声“$模板”;返回“xaddict”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 2015-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多