Добавить содержимое в файл PHP с помощью PHP / редактировать файл PHP с помощью PHP

0

Я создаю свою собственную систему CMS, и я хочу динамически создавать новые страницы из шаблона. Также как в Wordpress, когда вы добавляете новую страницу.

Это шаблон:

<?php require_once('backend-nav.php');?>

<div id="main">

<div id="main-content" class="xlarge">

    <article id="article-wrapper">
    // My content needs to go here!
    </article>
<?php require_once('backend-sidebar.php')?>

</div>
</div><!-- End main content container -->

<?php require_once('backend-footer.php')?>

<?php } else {
    echo '<div class="container">You have to be logged in to view this  page:.
'<ahref="login.php">Login</a>'.'</div>';
}
?>

Я сделал форму для отправки содержимого, которое я хочу на странице, а затем воспользуюсь следующим кодом, чтобы открыть php файл templatet и сохранить его как новый файл на сервере с содержимым страницы

$doc = new DOMDocument();
$doc->loadHTMLFile("new_page.php");
$article = $doc->getElementById('article-wrapper');
$p = $doc->createElement('p');
$addP = $article->appendChild($p);
$content = $doc->createTextNode($page_content);
$addP->appendChild($content);
// the url for the page is also submitted to the form and later added to the menu, which works.
$doc->saveHTMLFile($page_url.'.php');

Поскольку функция loadPHP отсутствует, я бы воспользовался этой функцией. Он также работал для меня при добавлении ссылки в основное меню, которое также является файлом PHP.

Теперь контент добавляется в файл и сохраняется соответствующим образом, но по какой-то причине он запускает код в некоторых местах, например, некоторые знаки заменяются так же? и> и т.д.:

require_once('backend-header.php');
?>
<?php if (isset($_COOKIE['username'])) { ?>
    <?php require_once('backend-nav.php');?>

<html>
<body>
<div id="main">

<div id="main-content" class="xlarge">

    <article id="article-wrapper">

<p>test content added in p tags</p></article>
<?php require_once('backend-sidebar.php')?>    </div><!-- End main content container -->
</div>

<?php require_once('backend-footer.php')?><?php } else {
    echo '<div class="container">You have to be logged in to view this page: ' . 
    '<a href="login.php">Login</a>'.'';
}?&gt;</body></html>

конечный тег PHP перед заменой тега html. Я также попробовал fread/write, чтобы изменить файл, но я, вероятно, не правильно использую вещи.

Есть ли способ добавить код в php файл с php или другим способом получить то, что я пытаюсь сделать?

Благодарю!

  • 0
    Хотя вы можете сделать это таким образом, вы не должны. Это опаснее. Если вы храните HTML в БД и распечатываете его на PHP, у вас есть только возможность внедрения JavaScript. Если вы сохраняете пользовательский ввод в файл PHP, у вас есть возможность внедрения PHP, который может занять ваш сервер. Вместо этого вы должны изучить переписывание URL-адресов и использовать базу данных для хранения пользовательского ввода.
Теги:
content-management-system
domdocument
read-write

1 ответ

1
Лучший ответ

DOMDocument используется только для чтения XML и HTML, у них есть структура. Когда вы вставляете PHP-код в html файл, он больше не является html. Давайте посмотрим пример ниже.

Код html:

<a>text</a>

У узла, который имеет имя "a", есть контент. DOMDocument может это хорошо понять. Но

<a><?php if (false) : ?>true</a><? else: ?>false</a><?php endif ?>

DOMDocument не может понять php, и он будет считать первый </a> ближе к <a>. Как насчет второго, читатель может попытаться прочитать, исправив его или просто проигнорировав его или добавив что-то, чтобы он стал структурированным. Таким образом, вы не можете использовать DOMDocument в этом случае. Вы можете попытаться использовать file_get_contents и заменить содержимое, а затем использовать file_put_contents, чтобы записать его обратно.

  • 0
    Спасибо! Это проясняет ситуацию для меня. Я использовал функцию file_get_content, чтобы заменить его новым содержимым, а затем записал содержимое в новый файл, и он работает как шарм :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню