【问题标题】:How do I include a text file in PHP as PHP, without printing to the page?如何在 PHP 中将文本文件包含为 PHP,而不打印到页面?
【发布时间】:2012-01-13 20:07:22
【问题描述】:

我正在使自己成为一个网页,在页面加载时简单地重定向到其他网站列表中的一个。为了能够更轻松地编辑站点列表,我将列表移动到单独的文本文档中。在 PHP 代码中包含该文件后,浏览器将恢复为解析 HTML,并在包含结束时再次返回。结果,我的代码被打印到屏幕上而不是被执行。我无法在文本文件中实现 PHP 标头和标签,因为这会破坏将其保留在外部的目的。就目前而言,我有另一个脚本,如果我想添加它们,我可以将链接附加到文件中。

index.php,我正在使用的文件

    <?php 
        $array_content = array(include 'sites.txt');
        header("location: ".$array_content[rand(0,9)]);
    ?> 

sites.txt,我包含的文件

    "http://www.nsa.gov/"
    ,"http://www.youtube.com/watch?v=oHg5SJYRHA0"
    ,"http://leekspin.com/"

有没有办法只将文本文件插入 index.php,而不将其打印到屏幕上?

【问题讨论】:

  • 你有能力改变这个TXT文件的格式吗?
  • 这里的其他选项包括使用 JSON 来维护列表。

标签: php


【解决方案1】:

你不应该!

将其解析为文本(例如,通过去除空格内容并用逗号分隔)或者,不太理想的是,将内容设为 PHP 代码,然后包含它 使用include

将 TXT 文件解析为文本

您可能应该坚持将文件解析为文本 - 您可以为此使用 file() 函数。 file() 读取整个文件并将其内容作为行数组返回(仍然附加行尾)。你可以对这些数据做任何你需要的事情(例如,去掉逗号和空格)。

包含文件中的 PHP 代码

如果你选择前者(包括 TXT 文件中的 PHP 代码,如果你想让sites.txt 公开可用,这是一个坏主意),那么你应该尽量不要污染全局命名空间。您可以通过使用其他答案提到的解决方案来实现它:

  • sites.txt:

    <?php
    return 'your string goes here';
    
  • 在您的脚本中:

    <?php
    $my_string = include('sites.txt');
    

最糟糕的解决方案 - eval()

仅出于提供信息的原因将其包括在内。如果您的 TXT 文件中有 PHP 代码,您可以使用 eval() 将其解析为 PHP 代码。但请记住 - eval() 是邪恶的,不惜一切代价避免它。

【讨论】:

  • @Phil: eval() 不需要&lt;?php 开始标签,仍然是可能解决方案之一(实际上不是首选解决方案) .这就是为什么我将它包含在我的答案中,所以我的答案可以变得更全面。
  • 啊,使用 file() 效果很好,并且很好地清理了我的站点文件。谢谢!
  • @Phil,告诉人们什么不该做以及为什么不做也很重要。 每一个新的 PHP 程序员发现 eval() 并被黑暗的一面所诱惑......
【解决方案2】:

你想要的是PHP的parse_ini_file()fn:
http://php.net/manual/en/function.parse-ini-file.php

然后,您可以轻松地在单独的文件中管理您的列表,并将其作为数组导入以供使用,而无需大惊小怪。

【讨论】:

  • 是的,你应该;-)。这是一个更好的解决方案,并且更容易保护。
  • 不确定你们在我提供给函数原始文档的链接上方需要哪些示例...
【解决方案3】:

您将代码与数据混合在一起。 txt文件只是txt。您需要做的是以纯文本格式存储它。由于只有一个字段,我建议使用由换行符分隔的站点名称组成的平面文件。

站点名称.txt:

site1.com
site2.org
site3.net

获取文件的php代码:

$siteList = file('/path/to/Sitenames.txt');

然后您可以从检索到的列表中执行任何操作。

【讨论】:

    【解决方案4】:

    建议:

    像这样保持你的“sites.txt”,

    <?php 
    $array_content = array( 
        "http://www.nsa.gov/",
        "http://www.youtube.com/watch?v=oHg5SJYRHA0",
        "http://leekspin.com/"
    );
    ?>
    

    然后,“index.php”

    <?php 
        include('sites.txt');
        header("location: ".$array_content[rand(0,9)]);
    ?> 
    

    【讨论】:

    • 您在 sites.txt 中缺少 PHP 上下文
    猜你喜欢
    • 2015-04-09
    • 2015-03-09
    • 2010-10-24
    • 1970-01-01
    • 2015-05-11
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多