2013-04-18 65 views
1

似乎很奇怪某些函數在被Web瀏覽器調用時定義, 但它在命令行模式下變得未定義。未在命令行中定義的PHP函數

例如,

<?php 
echo function_exists('mb_detect_encoding') ? 'yes' : 'no'; 
?> 

當在瀏覽器中運行,它打印,這意味着該功能已被定義爲「是」。

但是,當我在命令行中運行這段代碼,它打印「無」

爲什麼?在命令行模式下我錯過了什麼設置?

+3

http://php.net/manual/en/mbstring.installation.php –

+0

奇怪? Web瀏覽器通常不運行PHP的命令行版本:它們將PHP作爲Web服務器模塊或CGI/FastCGI運行。 –

+0

@MikeB我很確定我已經安裝了mbstring – sc1013

回答

2

在linux上你應該檢查/etc/php5/cli/conf.d以確定它是否啓用。 否則請嘗試從另一個環境複製,例如/etc/php5/apache2/conf.d

1

這是因爲您的發行版選擇了編譯時間選項。看起來他們已經在cli解釋器中啓用了它,但不是在apache模塊中。

檢查mbstring擴展的installation instructions。如果你真的需要它,你必須爲自己編譯php。

0

當通過CommandLine(CLI)調用腳本時,請務必使用與Webserver在執行PHP時使用的配置文件相同的配置文件。

從 「PHP --help」:

-c |尋找php.ini文件在此目錄

時下模塊,mb_string就是其中之一,被動態地加載...

+0

點擊「編輯」更新您的答案。 (如果這是你想要做的) – Jocelyn

+0

對不起,相當新的stackoverflow :) – pmayer

0

命令php -m列出您的活動模塊(擴展)。

要查看它是否處於活動狀態,請在此列表中搜索mbstring。如果它不存在,它可能是:

  • 在apache_handler php.ini中

  • 殘疾人專用啓用在CLI php.ini中

添加extension=mbstring.so到您的全球php.ini啓用它。 (如果它構建爲共享庫。)

相關問題