Как написать PHP-код внутри fwrite()?
Здравствуйте, в своем коде я хочу создать новый файл .php, используя php: fwrite(). Как я могу написать PHP внутри функции fwrite(). Мои предыдущие попытки закончились ошибками, потому что PHP-код выполняется, а не «записывается» внутри созданного файла ($fp).
Это мой код:
$fp=fopen('../blogs/'.$url.'.php','w');
fwrite($fp, "
<p>This is a paragraph</p>
<?php
$conn = mysqli_connect('server', 'username', 'password', 'database');
if (!$conn){
echo '<h3 class='container bg-dark p-3 text-center text-warning rounded-lg mt-5'>Not able to establish Database Connection<h3>';
}
// Get data to display on index page
$sql = 'SELECT * FROM blog WHERE id = $id';
$result = $conn->query($sql);
while($row = $result_->fetch_assoc()){
$content = $row['content'];
echo $content;
" ?>
Я могу отображать переменные, используя $var внутри записанного файла. Но как мне просто написать php-код внутри $fp-файла, не выполняя его раньше?
Спасибо за каждую помощь :)
некоторые люди любят изобретать велосипед трудным путем, возможно:)
потому что я не хочу иметь статический html без подключения к базе данных.
БД в HTML? Вы случайно не ищете шаблоны?
Нет, мне просто нужен ответ, как создать файл php с fwrite и с переменными внутри. Соединение с базой данных только с HTML невозможно...
Это должна быть просто строка, как и любая другая. У тебя есть база данных? вероятно, имеет смысл помещать туда контент, а не генерировать файлы. Как и большинство CMS-систем. Непонятно, каков ваш подход, но он очень странный, я сомневаюсь, что это лучший способ сделать все, что вам нужно.
Вы пытаетесь интерполировать любые текущие переменные в строку содержимого? Если да, то какие? Если нет, то почему вы вообще используете строку в двойных кавычках?
???В: Где твой fclose()
???
То, что вы делаете, необычно, и, как говорили другие люди, я советую вам поискать более консолидированные готовые решения.
В любом случае, проблема в том, что вы используете двойные кавычки, которые вызывают нежелательное раскрытие переменных.
Чтобы избежать этого, вы можете просто заменить одинарные кавычки на двойные в основной строке кода PHP, которую вы пишете.
(за исключением строки сообщения об ошибке <h3>, для которой внешние кавычки должны быть записаны как \'
)
Эта практика также нужна для работы строки $sql = 'SELECT * FROM blog WHERE id = $id';
(она должна стать $sql = "SELECT * FROM blog WHERE id = $id";
) — Хотя непонятно, откуда берется переменная $id.
Также ваша строка, содержащая код, кажется усеченной
Как вы можете видеть с подсветкой синтаксиса на этом сайте, все переменные в вашей сгенерированной строке (например, $conn
, $sql
) понимаются PHP как переменные в строке. Когда PHP запускает ваш код, эти переменные в строке будут расширены (т. е. заменены фактическими значениями) перед запуском fwrite().
Вы можете проверить свой выходной файл PHP, чтобы убедиться. Все переменные заменены на бессмысленные или просто исчезли. Что вы хотите сделать, так это оставить имя переменной как есть (со знаком доллара и всем остальным) и записать в файл.
Это объясняется документацией о парсинге строк PHP:
Когда строка указана в двойных кавычках или с помощью heredoc, в ней анализируются переменные.
Есть 2 способа это исправить:
$
на \$
) в строке с двойными кавычками.'
на \'
), чтобы предотвратить случайное завершение строковой кавычки.В вашем сгенерированном коде есть больше проблем, чем это (например, атрибут class
использует одинарную кавычку, которая также заканчивает вашу строку с одинарной кавычкой и вызывает синтаксическую ошибку в сгенерированном коде). Но если я исправлю весь код для вас, я сделаю этот сайт бесплатной службой написания кода, а это не так.
Для дальнейшей отладки просто откройте сгенерированный файл PHP и проверьте, какая в нем синтаксическая ошибка. Вы можете использовать редактор, поддерживающий проверку синтаксиса (например, VSCode с PHP Intelephence). Или вы можете просто использовать php -l <filename>
. Исправьте их один за другим, изменив способ их создания.
Почему вы хотите динамически создавать php-файлы из другого php-скрипта?