Как написать PHP-код внутри функции fwrite()?

Как написать 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-файла, не выполняя его раньше?

Спасибо за каждую помощь :)

Почему вы хотите динамически создавать php-файлы из другого php-скрипта?

Progman 14.04.2023 00:02

некоторые люди любят изобретать велосипед трудным путем, возможно:)

Marcin Orlowski 14.04.2023 00:04

потому что я не хочу иметь статический html без подключения к базе данных.

JohannesDev 14.04.2023 00:04

БД в HTML? Вы случайно не ищете шаблоны?

Marcin Orlowski 14.04.2023 00:13

Нет, мне просто нужен ответ, как создать файл php с fwrite и с переменными внутри. Соединение с базой данных только с HTML невозможно...

JohannesDev 14.04.2023 00:17

Это должна быть просто строка, как и любая другая. У тебя есть база данных? вероятно, имеет смысл помещать туда контент, а не генерировать файлы. Как и большинство CMS-систем. Непонятно, каков ваш подход, но он очень странный, я сомневаюсь, что это лучший способ сделать все, что вам нужно.

ADyson 14.04.2023 00:30

Вы пытаетесь интерполировать любые текущие переменные в строку содержимого? Если да, то какие? Если нет, то почему вы вообще используете строку в двойных кавычках?

Phil 14.04.2023 01:56

???В: Где твой fclose()???

paulsm4 14.04.2023 02:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
8
103
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

То, что вы делаете, необычно, и, как говорили другие люди, я советую вам поискать более консолидированные готовые решения.

В любом случае, проблема в том, что вы используете двойные кавычки, которые вызывают нежелательное раскрытие переменных.

Чтобы избежать этого, вы можете просто заменить одинарные кавычки на двойные в основной строке кода PHP, которую вы пишете. (за исключением строки сообщения об ошибке <h3>, для которой внешние кавычки должны быть записаны как \') Эта практика также нужна для работы строки $sql = 'SELECT * FROM blog WHERE id = $id'; (она должна стать $sql = "SELECT * FROM blog WHERE id = $id";) — Хотя непонятно, откуда берется переменная $id.

Также ваша строка, содержащая код, кажется усеченной

Ответ принят как подходящий

Некоторые советы

  1. Кажется бессмысленным иметь динамический PHP в качестве кеша (если это так). Если вам нужно написать статический кеш HTML, вам лучше сделать это, написав фактический вывод HTML (.html).
  2. Если вам нужно сохранить динамическую страницу, а также кешировать, есть лучший способ кеширования, чем создание статических файлов для всех ваших страниц. Научитесь использовать composer , а затем найдите решение в Packagist.
  3. Даже если вас не волнуют 2 вышеуказанных пункта, вы должны сделать mysqli_connect(), включив общий скрипт. Информация MySQL будет меняться время от времени. Если это случится с вами, вам придется изменить много файлов с вашим подходом.

Вы проблема

Как вы можете видеть с подсветкой синтаксиса на этом сайте, все переменные в вашей сгенерированной строке (например, $conn, $sql) понимаются PHP как переменные в строке. Когда PHP запускает ваш код, эти переменные в строке будут расширены (т. е. заменены фактическими значениями) перед запуском fwrite().

Вы можете проверить свой выходной файл PHP, чтобы убедиться. Все переменные заменены на бессмысленные или просто исчезли. Что вы хотите сделать, так это оставить имя переменной как есть (со знаком доллара и всем остальным) и записать в файл.

Это объясняется документацией о парсинге строк PHP:

Когда строка указана в двойных кавычках или с помощью heredoc, в ней анализируются переменные.

Есть 2 способа это исправить:

  1. Экранируйте все знаки доллара (т. е. замените $ на \$) в строке с двойными кавычками.
  2. Используйте одинарную кавычку в вашем fwrite. В этом случае вы должны экранировать все одинарные кавычки (т. е. заменить ' на \'), чтобы предотвратить случайное завершение строковой кавычки.

В вашем сгенерированном коде есть больше проблем, чем это (например, атрибут class использует одинарную кавычку, которая также заканчивает вашу строку с одинарной кавычкой и вызывает синтаксическую ошибку в сгенерированном коде). Но если я исправлю весь код для вас, я сделаю этот сайт бесплатной службой написания кода, а это не так.

Для дальнейшей отладки просто откройте сгенерированный файл PHP и проверьте, какая в нем синтаксическая ошибка. Вы можете использовать редактор, поддерживающий проверку синтаксиса (например, VSCode с PHP Intelephence). Или вы можете просто использовать php -l <filename>. Исправьте их один за другим, изменив способ их создания.

Другие вопросы по теме