将数组作为参数传递给PHP文件

时间:2010-09-11 07:16:30

标签: php mysql html variables

我正在尝试从单个PHP模板创建一堆静态HTML页面。我想将一个数组(MySql DB中的一行)传递给.php模板文件,以便我可以将内容用作变量并获取HTML页面。最好的方法是什么?一个POST请求?一个功能?我在以下代码中循环MySQL查询结果并为每一行创建一个.html页面,但我不确定如何将$ row数组传递给'Template.php'文件:

while ($row = mysql_fetch_array($result))
{

    $variableToPass = $row;
    $dynamicsource = fopen('Template.php', 'r');
    $htmldata = fread($dynamicsource, 1235);
    fclose($dynamicsource);

    $targetfilename = "row/"
        . $row['name']
        . ".html";
    $targetfile = fopen($targetfilename, 'w');
    fwrite($targetfile, $htmldata);
   }

例如,Template.php文件可能看起来像:

 <html>
    <body>
      <?php
         include 'mySqlTests.php';
         print_r($variableToPass);
      ?>
      other text and stuff
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

所以基本上你要做的是从数据库中获取一些数据,然后使用PHP文件作为模板来创建HTML文件。

最简单的方法是在模板生成器代码中的适当位置include模板;您可以在调用周围放置ob_startob_get_clean以将输出捕获到字符串中,而不是将其发送到客户端。调用include的范围内的变量将在包含的文件中可用。例如:

<?php
foreach ($rows as $row) {
    ob_start();
    include 'template.php';
    $data = ob_get_clean();
    file_put_contents('target/' . $row['name'] . '.html');
}

...模板可以执行以下操作:

                   

但是这种方法有一些考虑因素:

  • 如果模板包含危险代码,它将被执行。
  • 模板可以访问包含时范围内的所有变量,包括您不希望它修改的变量。通过将模板调用放入专用函数可以稍微减轻这一点。

另一种方法是在加载的模板上进行简单的搜索和替换;而不是使用PHP作为模板语言,你基本上是在发明自己的。这样效率较低,但更安全,因为您限制了模板对程序内部的访问权限。

另一个选择是通过XSLT路由将数据库转换为XML - 加载数据,将其转换为XML表示,应用输出(X)HTML的XSLT模板。这提供了注入的灵活性和安全性,但XSLT难以掌握,难以调试,并且转换为XML的效率低​​于直接路由到PHP。