Как отобразить значение из одного файла в другой файл при копировании или записи в PHP? - PullRequest
0 голосов
/ 04 октября 2018

Я хочу написать и скопировать файл.И мне нужно echo значение при записи и копировании файла.

Пожалуйста, проверьте мой код:

<?php 
$pages = array("story1", "story2", "story3","story4","story5","story6");
$length = count($pages);

for($i=0;$i<$length;$i++){
    $myFile = "newfile-in-{$pages[$i]}.php";

    if (file_exists($myFile)) {
        echo copy("expcontent.php","newfile-in-{$pages[$i]}.php");
    }else{
        $myfile = fopen("newfile-in-{$pages[$i]}.php", "w") or die("Unable to open file!"); 

        $txt = "Mickey {$pages[$i]}\n";
        fwrite($myfile, $txt);
        $txt = "Hello Mouse\n";
        fwrite($myfile, $txt);
    }
}

В моем expcontent.php:

<p>Kids <?php echo $pages[$i];?>!</p>

Все работает нормально.Новые файлы были созданы и прекрасно скопировали файл.Но вывод:

Kids, !   
Kids, !   
Kids, !   
Kids, !   
Kids, !   

Ожидаемый вывод:

Kids Story1!
Kids Story2!
Kids Story3!
Kids Story4!
Kids Story5!
Kids Story6!

Не получается правильный вывод, или я думаю, что значение $pages[$i] для expcontent.php.

Пожалуйста, проверьте мой код и исправьте меня.Любые идеи или предложения будут приветствоваться.Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Читая комментарии под вопросом [в дополнение к вопросу], я понимаю, что вы хотите расширить историю, записав содержимое файла, а не просто имя файла.

Если вы создали «главы» истории и сохранили их как отдельные файлы, вы можете использовать include для записи содержимого:

например,

<?php
    $title="My Kids Story";
    include "chapter1.php";
    include "chapter2.php";
?>

Вы можете сохранить главы как .php ИЛИ вы можете использовать альтернативное расширение и заблокировать прямой доступ к нему [от пользователей] в файле конфигурации вашего сервера (httpd.conf на apache). Подробнее об этом здесь

например, укажите это в своей конфигурации и включите chapter1.inc вместо .php

<Files ~ "\.inc$">
  Order allow,deny
  Deny from all
</Files>
0 голосов
/ 04 октября 2018

Вы просто копируете файл, но он никогда не выполняется.Вы можете прочитать содержимое файла и выполнить его с помощью eval.Обязательно ознакомьтесь с документацией.

Внимание Конструкция языка eval () очень опасна, поскольку позволяет выполнять произвольный код PHP.Таким образом, его использование не рекомендуется.Если вы тщательно проверили, что нет другого выбора, кроме как использовать эту конструкцию, обратите особое внимание на то, чтобы не передавать в нее данные, предоставленные пользователем, без надлежащей проверки их заранее.

$pages = array("story1", "story2", "story3","story4","story5","story6");

foreach ($pages as $page) {
  $myFile = "newfile-in-{$page}.php";

  if (file_exists($myFile)) {
    $content = file_get_contents('expcontent.php');
    $newcontent = eval($content);
    file_put_contents($myFile, $newcontent);
  } else {
    $myfile = fopen("newfile-in-{$page}.php", "w") or die("Unable to open file!"); 
    $txt = "Mickey {$page}\n";
    fwrite($myfile, $txt);
    $txt = "Hello Mouse\n";
    fwrite($myfile, $txt);
  }
}

Из руководстваеще раз:

Код не должен переноситься при открытии и закрытии тегов PHP.

Поэтому вам необходимо изменить expcontent.php на:

?><p>Kids <?php echo $page;?>!</p>

или

echo "<p>Kids {$page}!</p>";

Еще один, более безопасный способ сделать это без использования eval - это захватить вывод вашей второй страницы (это только блок if, и он должен работать с вашим оригиналомexpcontent.php).

ob_start();
include 'expcontent.php';
$content = ob_get_clean();
file_put_contents($myFile, $content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...