如何使用 php 创建 php 文件

How to create php file using php

我正在尝试使用 php 本身创建多个 .php 文件。
我想将一些代码放入文件中;大多数代码是相同的,但只有一两个变量是我想要动态的。我的意思是我制作的每个文件都完全一样,主题之间的唯一区别是一个变量。 我的函数是 this:

function generate_corn_files()
{
        $C = $GLOBALS['C'];
        $db = $GLOBALS['db'];

        //delete all contents of folder
        RemoveDir($C->INCPATH.'cron/feed/', false);
        $res    = $db->query('SELECT id FROM category ');
        while($cat = $db->fetch_object($res)) {
                $id     = $cat->id;

                $open_output = <<<'PHP'
<?php
$outter_id      = $id;
if($example = true){
        echo 'test';
        echo $C->INCPATH;
}

?>
PHP;
                $fp=fopen($C->INCPATH.'cron/feed/filename_'.$id.'.php','w');
                fwrite($fp, $open_output);
                fclose($fp);
        }
}

我尝试使用 heredoc 放置文件内容,但我希望 $outter_id = $id; 中的 $id 等于 $id = $cat->id;
它是 heredoc 之外的一个变量,我无法让它在其中工作!
还有其他解决方案可以使其正常工作吗?

也许这对您有所启发

function generate_corn_files()
{
    $C = $GLOBALS['C'];
    $db = $GLOBALS['db'];

    //delete all contents of folder
    RemoveDir($C->INCPATH.'cron/feed/', false);
    $res    = $db->query('SELECT id FROM category ');
    while($cat = $db->fetch_object($res)) {
            $id     = $cat->id;

            $open_output = <<<'PHP'
<?php
$outter_id      = $id;
if($example = true){
    echo 'test';
    echo $C->INCPATH;
}

?>
PHP;

    $php_var_name_pattern = '/$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)/';
    $open_output = preg_replace_callback(
        $php_var_name_pattern, 
        function($matches) {
                if(isset($GLOBALS[$matches[1]])) {
                        if(is_string($GLOBALS[$matches[1]])) { 
                                return '\''.$GLOBALS[$matches[1]].'\'';
                        } else {
                                return $GLOBALS[$matches[1]];
                        }
                } else { 
                        return $matches[0];
                }          
        }, 
        $open_output);

        $fp=fopen($C->INCPATH.'cron/feed/filename_'.$id.'.php','w');
            fwrite($fp, $open_output);
            fclose($fp);
    }
}

您没有使用 HEREDOC syntax but rather NOWDOC syntax。如果您使用 HEREDOC,将计算其中的所有变量,因此您必须使用 $ 转义您不想计算的变量。

$open_output = <<<PHP
<?php
$outter_id      = $id;
if($example = true){
        echo 'test';
        echo $C->INCPATH;
}
?>
PHP;

或者,您可以坚持使用 NOWDOC,使用占位符,然后再替换它。

$open_output = <<<'PHP'
<?php
$outter_id      = %%%id%%%;
if($example = true){
        echo 'test';
        echo $C->INCPATH;
}
?>
PHP;
str_replace("%%%id%%%", $id, $open_output);