2014-10-17 116 views
-3

我的工作在其通過<?php include 'filename'; ?>PHP「包括」文件

我想要做的就是我想要一個PHP函數或代碼,替換所有包括與實際文件OCCURENCES,所以調用許多PHP文件的項目我所有的6-7文件都被轉換成一個PHP文件。我必須將它分發給很多人,因此在這種情況下擁有一個PHP文件就很好。調用該php文件將創建一個包含所有包含文件的新php文件。

我想將我的完整項目發佈到單個文件中,就像adminer一樣! 任何想法如何做到這一點?

例如: -

...php-code... 
<?php 
include 'dologin.php'; 
?> 
...php code... 

將被轉換爲: -

...php code... 
function dologin();{ 
...(dologin.php file)... 
...php code... 
+0

我不明白這個「問題」。 – 2014-10-17 14:24:01

+0

那麼你的問題是什麼?在你說「我該怎麼做?」之前,請記住,那樣的問題太廣泛了,並且會像這樣封閉。所以,如果您迄今爲止編寫了任何代碼,我強烈建議將其添加到您的問題中。 – 2014-10-17 14:24:22

+1

很難看到你要在這裏做什麼,但是你可以使用'file_get_contents()'而不是'include',並且隨時將每個讀取的文件的內容寫入單個文件。你需要更確切地說一定要說。 – 2014-10-17 14:24:32

回答

1

這就是我真正想要的。如果可以,請改善這個php代碼。

<?php 
$a = file_get_contents("sample file"); 
$match = "/include '.*';/"; 
    preg_match_all($match, $a, $matches); 
    foreach($matches['0'] as $b) 
    { 

     $c = explode("'", $b); 
     $c = $c['1']; 
     $temp = file_get_contents($c); 
     if(preg_match("/<?php/", $temp)) 
     { 
     $a = str_replace($b, "?>". file_get_contents($c) . " \n ?>\n<?php \n", $a); 
     } 
     else 
     { 
     $a = str_replace($b, "?>". file_get_contents($c) . "\n<?php \n", $a); 
     } 
} 
file_put_contents("combined.php", $a); ?> 
0

嘗試......

注意,我還沒有機會測試這一點,但get_included_files爲您提供所有包含的內容,然後您可以使用所有內容創建一個新文件。

<?php 

    ...All the include statements .... 


    $my_includes = get_included_files(); 
    $file = "everything.php" 
    file_put_contents($file, "<?PHP"); 

    foreach($my_includes as $included){ 
     $file_contents = file_get_contents($included); 

     file_put_contents($file, $file_contents, FILE_APPEND); 


    } 
    $this_file = __FILE__; 
    // put the current file in and close 
    file_put_contents($file, $this_file, FILE_APPEND); 
    file_put_contents($file, "?>", FILE_APPEND); 

    ?> 
0

我知道你想將包含的文件整合到一個函數中。
我從來沒有想過這個問題,因爲它沒用,但也許你有一些「未知」reasson背後,所以我不得不回答。

方法如下:

dologin.php

<?php 
... php code 
?> 


功能:

function dologin(){ 
global $variable1; 
global $variable2; 
// paste php code from the dologin.php file here 
} 

注:
變化$變量1和$變量2的變量可能會從您的ma中的其他文件中包含在你正在嘗試使用該函數的文件中,如果這些變量在函數中被使用,則不會執行此操作,否則將面臨變量範圍問題。



這就是現在你有一個函數,而不是一個PHP文件。

1

你不想在這裏使用include(),你基本上想要做的就是把一堆文件合併成一個文件。當你去的時候,你不需要真正的解析這些文件,你只需要打開它們,直到結束,然後把你得到的內容粘貼到另一個文件中 - 重複直到完成。

事情是這樣的:

<?php 
$sources = array('file1.php', 'file2.php', 'file3.php'); 

$out = fopen('final.php', 'w+'); 
if ($out === false) 
    die('Could not open output file'); 

foreach($sources as $source) { 
    $buff = file_get_contents($source); 
    fwrite($out, $buff); 
} 

fclose($out); 
?> 

注:

  • 我在這裏做的非常小的錯誤檢查。如果您無法打開其中一個源文件,或者您閱讀的內容與期望的內容大不相同,會發生什麼情況?
  • 我在這裏做了很少的錯誤檢查。如果fwrite()失敗會發生什麼情況?
  • 我在這裏做了很少的錯誤檢查。像我一樣繼續追加是否安全?在將每個文件寫入輸出文件之後應該注入換行符?你是肯定你不會最終失蹤?>
  • 我在這裏做很少的錯誤檢查。沒有編輯器會在開始時意外保存一個輸入文件,其中包含byte-order-mark

你當然需要處理做一些生成的文件,和解除它做一次(雖然發送到fopen()標誌將截斷它,這就是爲什麼我與家人的功能去了,除了方便file_get_contents())。查看手冊以獲取更多關於它們如何工作的信息。老實說,儘管 - 根據你的平臺,一個簡單的shell腳本可能就足夠了。我是漂亮確定這是你想要從你編輯到你的問題的額外信息。

+0

附加說明(儘管你可能認爲你的第三點......):以php代碼結尾的文件是否都有一個關閉的'?>'標籤?沒有這樣做也會搞砸了。 – jeroen 2014-10-17 14:45:11

+0

@ jeroen我想這值得一提。我假設他試圖捆綁的文件是已知的(因此捆綁),但這是一個足夠好的點,以及尋找破碎的編輯。 – 2014-10-17 14:51:54

+0

請注意,''>''實際上是有效的,並建議:http://php.net/manual/en/language.basic-syntax.phptags.php – jeroen 2014-10-17 14:58:38