2015-10-20 161 views
-1

我正在尝试使用php本身创建多个.php文件。
我想把一些代码放到一个文件中;大部分代码是相同的,但只有一个或两个变量,我想成为动态的。我的意思是我制作的每个文件都完全一样,主题之间的唯一区别就是一个变量。 我的功能是this如何使用php创建php文件

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

我试图使用定界符把文件的内容,但我想$id$outter_id = $id;等于$id = $cat->id;
它是heredoc之外的变量,我不能让它的内部工作它!
是否有任何其他解决方案使其工作?

+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); 
+0

谢谢,最佳答案,占位符为我做了这份工作 –

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

谢谢!很好的答案,但我想知道是不是有没有办法创建.php文件,并填写它与PHP代码,而不是使用<<< heredoc? –

+0

没有简单的方法,不会是一个格式和调试噩梦,因为你在做什么有点不寻常,这是恕我直言的最佳方式。 – Wobbles

+0

实际上,您并未使用heredoc-syntax,而是使用与单引号字符串相当的newdoc-syntax,因此为什么不使用旧的单引号字符串? –