передать массив в качестве параметра в файл PHP - PullRequest
0 голосов
/ 11 сентября 2010

Я пытаюсь создать группу статических HTML-страниц из одного шаблона PHP.Я хочу передать массив (строку в БД MySql) в файл шаблона .php, чтобы я мог использовать его содержимое в качестве переменных и вернуть страницу HTML.Какой лучший способ сделать это?ПОЧТОВЫЙ запрос?Функция?Я перебираю результаты запроса 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 голосов
/ 11 сентября 2010

Итак, в основном вам нужно получить некоторые данные из базы данных, а затем использовать файл PHP в качестве шаблона для создания файла HTML.

Самый простой способ сделать это - просто include шаблон в соответствующей точке в коде генератора шаблонов; Вы можете поместить ob_start и ob_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 в качестве языка шаблонов вы в основном изобретаете свой собственный. Это менее эффективно, но безопаснее, потому что вы ограничиваете доступ шаблона к внутренностям вашей программы.

Еще одним вариантом является база данных в XML по маршруту XSLT - загрузите ваши данные, преобразуйте их в представление XML, примените шаблон XSLT, который выводит (X) HTML. Это обеспечивает гибкость и безопасность от инъекций, но XSLT довольно сложно освоить, сложнее отладить, а преобразование в XML менее эффективно, чем прямой путь к PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...