從命令行和HTTP執行php有什麼區別?他們是否使用相同的可執行文件(如php.exe或php-cgi.exe(Apache或IIS))?從命令行或HTTP執行時,結果是否有所不同?從命令行和HTTP端執行php的區別
回答
無論PHP是通過Web服務器模塊還是CLI調用,都使用相同的二進制基礎(但有時可以配置爲使用不同的ini,這可能會影響腳本)。它的環境也會有所不同,因此環境變量將不準確。
PHP也意識到它被調用的方式不同,並會根據它調整它的輸出(即,通過CLI調用時,phpinfo();
輸出的格式不同)。
或者它們使用不同的二進制。我遇到的大多數實現有一個完全不同的版本cli&apache模塊,有時甚至不是相同的版本.... – Wrikken 2010-06-10 16:26:17
@Wrikken。出於某種原因,這一定是由管理員有目的地完成的。無論哪種方式,我現在都將它稱爲'二進制基地' – webbiedave 2010-06-10 16:27:05
當你從命令行執行php時,你的服務器apache或iis沒有任何作用。你只需使用php4或php5文件夾來執行你的代碼。根據兩個文件夾中可用庫和php.ini設置的不同,執行可能會有所不同。當使用你的apache/bin中的apache php.ini運行時。從命令行php.ini中使用php5或php4文件夾時。
大部分情況都是一樣的。巨大的差異在於超級全局可能不會被填充。最好的地方看這些將在php.net http://php.net/manual/en/features.commandline.php
主要區別是參數傳遞:從CLI運行,你沒有$ _GET,$ _POST,$ _SESSION等;所以參數必須作爲命令行參數傳遞,並使用if $ _SERVER ['argc']和$ _SERVER ['argv']]來訪問,請注意代碼運行的目錄和包含路徑;並確保你知道你已經加載了什麼php.ini。 輸出時,HTML標記不會顯示爲標記,但會顯示爲< h1> etc ....特別注意
(PHP_EOL非常有用),並且多個空格或製表符顯示爲多個空格或製表符,單一空間。 忘記頭文件()和其他http特定函數
除了已經說過的,文件系統的哪些部分可以訪問的權限可能會有所不同:通過webserver的PHP作爲web服務器用戶運行,PHP來自命令行是作爲你自己運行的。
中的錯誤
這是一個php.ini設置(html_errors),但默認爲CLI版本滅無HTML標記。
記錄到標準錯誤
通常錯誤都記錄到Web服務器error.log中,但在CLI版本錯誤被寫入stderr。
這也可作爲一個php.ini設定(error_log)
的php.ini
,其用於CLI版本可以是不同文件 php.ini文件。這可能會導致一些令人討厭的錯誤(捲曲突然不可用等)。
不同的可執行文件
這是可能的安裝PHP的多個版本(PHP5 PHP4旁邊)
使用which php
,以確定您所使用的版本。
一切都顯示爲文本
的var_dump()是可讀沒有<pre>
header('Hello');
和echo('Hello');
儘管這個問題很老的沒有什麼區別,我想延長@ 鮑勃·範格的一點點。
在命令行運行PHP文件是很微不足道的,你只需要記住,有從網絡服務器上或服務器命令行界面上運行的文件中的一些差異:
無
沒有
$_GET
,$_POST
,$_SESSION
可用 Cookie,但你可以用獲得作爲參數傳遞給命令傳遞的參數。第一個值就是文件名。例如採取此文件:
<?php var_dump($argv); ?>
這樣調用:
[email protected]:$ /usr/bin/php /home/user/file.php foo bar
會給你這樣的輸出:需要從您的服務器的根
array(4) { [0]=> string(8) "file.php" [1]=> string(3) "foo" [2]=> string(3) "bar" }
完整的文件路徑 您將需要提供完整的路徑到您的文件(例如fo r
include()
,require()
,file_get_contents()
,...),即使它們可能在同一個文件夾中。不同的用戶/權限設置 這些文件不會被
www-data
用戶執行,而是由用戶登錄到您的機器中。這會影響所有影響計算機文件系統的文件函數調用(例如,mkdir()
,include()
,...),因此您必須確保向該用戶提供適當的權限。
除了這個有用的答案簡介之外,'$ _SERVER'變量對CLI中的腳本也是不可用的,例如$ _SERVER ['DOCUMENT_ROOT']'for訪問包括一個腳本。 – Martin 2016-12-06 09:15:02
- 1. 從php執行perl命令
- 2. PHP執行和在命令
- 3. PHP執行命令
- 4. Python執行HTTP命令
- 5. 直接從命令行執行PHP
- 6. 從文件夾和命令提示符運行可執行文件的區別?
- 7. 用PHP執行Asterisk客戶端命令
- 8. 使用PHP執行終端命令
- 9. PHP +命令行執行
- 10. php javabridge執行命令行
- 11. PHP執行vs在linux終端執行相同的命令
- 12. 從NSIS執行命令行命令
- 13. 從命令行執行Django Shell命令
- 14. 從Python執行命令行命令
- 15. 從Perl執行命令行命令?
- 16. 命令的java run.exec和shell執行有什麼區別嗎?
- 17. 執行別名命令
- 18. 執行終端命令
- 19. 執行終端命令
- 20. 從JAVA客戶端執行PMCMD命令
- 21. 從MySQL客戶端執行shell命令?
- 22. 無法從終端執行mysql命令
- 23. 從Netlogo執行終端命令
- 24. 這兩個命令行執行.jar之間的區別?
- 25. 從命令行執行Powershell
- 26. 從JConsole執行命令行
- 27. 從命令行和exec()與PHP運行腳本有什麼區別?
- 28. PHP執行命令作爲子命令
- 29. 執行命令shell從PHP遠程
- 30. 執行從php腳本centos命令
這聽起來像是一個家庭作業或測試問題。這不是那麼糟糕或什麼。 – Nathan 2010-06-10 16:25:58
你真的應該閱讀手冊(http://www.php.net/manual/en/features.commandline.php)。它會告訴你差異和獎金功能,例如交互式shell,腳本文件的執行等。 – 2010-06-10 18:24:44