2015-10-20 172 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,因此爲什麼不使用舊的單引號字符串? –