2013-01-23 131 views
15

我正在檢查PHP manual以瞭解不同類型的PHP擴展(PHP模塊)。有Zend模塊(主要針對PHP大師),內置模塊和外部模塊。從命令行檢查動態加載的PHP擴展

有沒有辦法從命令行告訴PHP模塊是否已經動態加載或者它是否內置到PHP二進制文件中?

我的意思是:與php -m我得到所有加載的模塊,但我想知道哪些是內置的,哪些是外部的。

回答

2

我不確定這是否可能從常規的PHP代碼,可能有一些Zend內部調用,你可以從你自己的擴展。但是,有可能是猜測,通過檢查加載的擴展有一個可用的可能找動態庫的一個厚臉皮的方式...

$extdir=ini_get('extension_dir'); 

$modules=get_loaded_extensions(); 
foreach($modules as $m){ 
    $lib=$extdir.'/'.$m.'.so'; 
    if (file_exists($lib)) { 
     print "$m: dynamically loaded\n"; 
    } else { 
     print "$m: statically loaded\n"; 
    } 
} 

這不是萬無一失的,但或許對你來說足夠了!有關更多信息,

php -m 

或本:

+0

但是腳本需要檢查.so庫是否包含在php.ini中(如果帶有「extension = $ m.so」的行已添加)?另外,我想知道在phpinfo()輸出中是否有關於此的任何信息,但我看不到它 – rodrunner

35

只需在命令行中運行這個命令

php -i 

希望這有助於。

+2

這如何幫助區分動態加載的擴展和內置在二進制文件中的擴展?據我可以告訴兩種顯示一致。除非我錯過了某些東西,否則這與所問的問題完全無關 - 尤其是在提問者*在問題*中提及了'php -m'並解釋了爲什麼它不能提供他所需的信息。 –

+1

人們閱讀主題,而不是整個問題,並找到他們在第二個答案中尋找的答案,而不是第一個答案。 爲了糾正這個問題,問題的主題應該更加具體,只有動態加載的擴展是他感興趣的:「從命令行檢查動態加載的PHP擴展」... – Ilija

4

1)運行

php -i 

從輸出找到以下參數:

加載的配置文件 - 這將指定php.ini文件的位置正在使用你的PHP。

掃描該目錄以查看額外的.ini文件 - 如果不爲空,則該目錄中的某些.ini文件將動態加載php擴展。

解析的附加.ini文件 - 從上一個參數中指定的目錄加載的.ini文件。

如果您正在使用Linux你可以:

php -i | grep -e "Loaded Configuration File" -e "Scan this dir for additional .ini files" -e "Additional .ini files parsed" 

2)重命名你的php.ini文件和文件夾額外的.ini文件重命名。

3)重複步驟#1中,並驗證加載的配置文件附加.ini文件解析都具有(沒有的值)

4)運行

php -m 

您現在將看到一個僅包含php二進制文件內置擴展名的列表。