如何使用PHP创建php文件

时间:2015-10-20 15:55:03

标签: php heredoc

我尝试使用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放置文件内容,但我希望$id中的$outter_id = $id;等于$id = $cat->id;
它是heredoc之外的变量我无法在其内部工作!
有没有其他解决方案可以使它工作?

2 个答案:

答案 0 :(得分:2)

您没有使用HEREDOC syntax,而是使用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);

答案 1 :(得分:1)

也许这可以激励你

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);
    }
}