2012-03-01 181 views
107

我想直接使用命令行執行一條php語句,如​​3210,而不必使用單獨的php文件。如何從命令行執行PHP代碼?

這怎麼可能?

+1

在不使用任何其他包含用戶定義函數的文件的情況下執行function_exists()不會很好,除了測試PHP版本,您可以通過其他方式找到它。你想測試什麼功能? – 2012-03-01 16:34:27

+0

我正在尋找測試此功能:sg_load() – Steve 2012-03-01 16:43:28

+2

聽起來像你真正想要的是找出是否啓用了sourceguardian php擴展? – 2012-03-01 16:50:09

回答

173

如果您打算在命令行中執行PHP,我建議您安裝phpsh, a decent PHP shell這很有趣。

無論如何,PHP的命令提供兩個開關的命令行執行代碼:

-r <code>  Run PHP <code> without using script tags <?..?> 
-R <code>  Run PHP <code> for every input line 

可以用PHP的-r切換這樣:

php -r 'echo function_exists("foo") ? "yes" : "no";' 

上面上面的PHP命令應該是輸出no返回0你可以看到:

>>> php -r 'echo function_exists("foo") ? "yes" : "no";' 
no 
>>> echo $? # print the return value of the previous command 
0 

另一個有趣的開關PHP -a

-a    Run as interactive shell 

這是排序相比,phpsh跛,但如果你不想安裝the awesome interactive shell for php made by facebook to get tab completion, history, and so on,然後使用-a原樣

>>> php -a 
Interactive shell 

php > echo function_exists("foo") ? "yes" : "no"; 
no 
php > 

如果它不工作,你的箱子像我的盒子* ES *(在Ubuntu和拱測試),然後可能是你的PHP設置是模糊或損壞。如果您運行此命令:

php -i | grep 'API' 

應該看到:

Server API => Command Line Interface 

如果不這樣做,這意味着也許另一個命令將提供CLI SAPI。試試php-cli,也許它是你的操作系統中的一個包或一個命令。

如果你看到你的PHP命令使用CLI(命令行界面)SAPI(服務器API),然後運行php -h | grep code找出哪些瘋狂的開關 - 這已經不是年 -允許改變在您的版本/設置中運行代碼。

另外一對夫婦的例子,只是爲了確保它的作品在我的箱子:

>>> php -r 'echo function_exists("sg_load") ? "yes" : "no";' 
no 
>>> php -r 'echo function_exists("print_r") ? "yes" : "no";' 
yes 

另外請注意,有可能延長在CLI而不是在CGI或Apache SAPI加載。很可能有幾個PHP SAPI使用不同的php.ini文件,例如, /etc/php/cli/php.ini vs /etc/php/cgi/php.ini vs /etc/php/apache/php.ini在Gentoo盒子上。找出哪個ini文件與php -i | grep ini一起使用。

+3

它不會返回任何東西 – Steve 2012-03-01 16:44:46

+0

也許你的PHP設置已損壞。我更新了我的答案,包括提示。 – jpic 2012-03-01 16:50:08

+0

添加了一個關於php -a的註釋,它可能對您有用。 – jpic 2012-03-01 17:08:26

1

在命令行:

php -i | grep sourceguardian 

如果它的存在,那麼你會得到一些文字。如果不是,你不會得到一件事。

+0

要麼我是盲人,要麼這個答案與問題無關。這個答案應該回答問題:「如何直接從命令行運行PHP代碼,而不將PHP代碼保存到'.php'文件中?」? – trejder 2014-11-06 08:05:23

+6

@trejder我想知道我是否回答了錯誤的問題,但後來我查看了編輯歷史和評論。這回答了OP似乎確實需要的:找出是否加載了特定的PHP擴展。這個問題已經被重新表述出來了,所以現在並不適合。 – 2014-11-06 12:45:18