2011-07-08 120 views
0

大家PHP:如何從其他腳本執行腳本遍地

有沒有一種方法,使這片代碼工作:

<?php 
    while (1) { 
     include('third_party_script.php'); 
    } 
?> 

我不知道什麼是在third_party_script.php。 它可能是這個樣子:

<?php 
    function some() { return 0;} 
    some(); 
?> 

如果在third_party_script.php函數聲明,我會得到一個「不能重複聲明」的錯誤。所以我不能使用「包含」或「需要」。有解決方案嗎?

在此先感謝。

+7

你,包括當你不知道它包含什麼文件?這聽起來不是一個好主意。 – lonesomeday

+0

這個當前的解決方案有什麼問題? – kapa

+0

打開並看看? – Subdigger

回答

0

如果裏面有一個類或函數應該簡單地調用函數或實例化類。不過不知爲什麼你想從腳本中運行一些你不熟悉的內容。

如果您但是知道,它的工作如下圖所示:遍地

<?php 
    while (1) { 
     include('third_party_script.php'); 
     //call some_function which is defined in file above 
     some_function(); 
     //instantiate object and call some_function 
     $Object = new ThirdPartyClass(); 
     $Object->some_function(); 
    } 
?> 

循環的代碼,沒有逃生最終會殺死你的進程。 「時間」最終可能不會那麼長。總而言之,這聽起來像你不想追求的方向...

+0

我不會去運行它。它將由「third_party_script.php」的作者運行。想象一下,我正在編寫一個允許反覆執行「third_party_script.php」的庫。 – facha

0

我不是陛下你會試圖做的,但我假設你正在嘗試寫一個腳本,可以針對某種框架運行外部代碼段(如插件)。

你應該在這樣的情況下做的確實是什麼INFORCE一些結構上的插件,即

插件代碼看起來像

<?php 
    pluginname_exec($args) { 
     ... 
     Plugin Code gose here 
     ... 
    } 
?> 

腳本則應該導入腳本加載時

然後當你想運行插件,你會打電話

call_user_func("{$thisplugin}_exec",$args) 

其中$thisplugin是包含你的插件名稱的變化,最有可能的文件名,用了.php爲

這樣您只包括文件一次,但可以調用代碼多次,你所需要的。

如果你試圖執行一些未知代碼的原因,其他插件系統,這很可能是一個壞主意。

1

正如其他人所說,你可能不希望這樣做。

一個可能的解決方案,但是是這樣的:

<?php 
    while (1) { 
     passthru('php third_party_script.php'); 
    } 
?> 

,但要看是什麼第三方腳本是幹什麼的,這樣的事情會工作:

<?php 

function print_something() 
{ 
     print "hey"; 
} 

print_something(); 

?> 

(雖然它如果你運行像裏面while(1)會鎖定的事情了)

但是,一些東西,需要得到在_GET變量,例如般不會。

有我不得不這樣做上述關切負荷卻是一個可能的解決方案你有(而不是更普遍的問題你正在試圖解決)的具體問題。

另一個地方可以達到深奧的東西像這樣的runkit:

http://www.php.net/manual/en/intro.runkit.php

,但我沒有用它足夠的經驗,「建議」它。

+0

非常感謝您的回覆。這幾乎是我想要的。幾乎,因爲據我得到它,中繼會fork另一個進程,並與其他PHP解釋器執行「third_party_script.php」。 – facha

+0

是,它將這是原因,它是一個有點有限的周邊傳遞數據雖然如果你需要定義一些可用的第三方腳本常量或功能,你可以使用一箇中間的包裝解決方案。你幾乎不能在PHP中重新聲明一個函數或類。你可以嘗試濫用命名空間或eval來實現你想要的,但我希望這會讓你陷入一堆麻煩。 – ADW