當前位置:九游会j9娱乐平台-九游ag登录中心网址 » 編程語言 » linuxphp調試

linuxphp調試-九游会j9娱乐平台

發布時間: 2024-11-10 17:26:31

『壹』 如何在 linux 命令行中使用和執行 php 代碼

php是一個開源伺服器端腳本語言,最初這三個字母代表的是「personal home page」,而現在則代表的是「php:hypertext preprocessor」,它是個遞歸首字母縮寫。它是一個跨平台腳本語言,深受c、c 和java的影響。

在 linux 命令行中運行 php 代碼

php的語法和c、java以及帶有一些php特性的perl變成語言中的語法十分相似,它當下大約正被2.6億個網站所使用,當前最新的穩定版本是php版本5.6.10。

php是html的嵌入腳本,它便於開發人員快速寫出動態生成的頁面。php主要用於伺服器端(而javascript則用於客戶端)以通過http生成動態網頁,然而,當你知道可以在linux終端中不需要網頁瀏覽器來執行php時,你或許會大為驚訝。

本文將闡述php腳本語言的命令行方面。

1. 在安裝完php和apache2後,我們需要安裝php命令行解釋器。

# apt-get install php5-cli [debian 及類似系統]    # yum install php-cli [centos 及類似系統]

接下來我們通常要做的是,在/var/www/html(這是 apache2 在大多數發行版中的工作目錄)這個位置創建一個內容為 ,名為 infophp.php 的文件來測試(php是否安裝正確),執行以下命令即可。

# echo '' /var/www/html/infophp.php

然後,將瀏覽器訪問 http://127.0.0.1/infophp.php ,這將會在網路瀏覽器中打開該文件。

檢查php信息

不需要任何瀏覽器,在linux終端中也可以獲得相同的結果。在linux命令行中執行/var/www/html/infophp.php,如:

# php -f /var/www/html/infophp.php

從命令行檢查php信息

由於輸出結果太大,我們可以通過管道將上述輸出結果輸送給 less 命令,這樣就可以一次輸出一屏了,命令如下:

# php -f /var/www/html/infophp.php | less

檢查所有php信息

這里,『-f『選項解析並執行命令後跟隨的文件。

2. 我們可以直接在linux命令行使用phpinfo()這個十分有價值的調試工具而不需要從文件來調用,只需執行以下命令:

# php -r 'phpinfo();'

php調試工具

這里,『-r『 選項會讓php代碼在linux終端中不帶和標記直接執行。

3. 以交互模式運行php並做一些數學運算。這里,『-a『 選項用於以交互模式運行php。

# php -a    interactive shell    php echo 2 3;    5    php echo 9-6;    3    php echo 5*4;    20    php echo 12/3;    4    php echo 12/5;    2.4    php echo 2 3-1;    4    php echo 2 3-1*3;    2    php exit

輸入 『exit『 或者按下 『ctrl c『 來關閉php交互模式。

啟用php交互模式

4. 你可以僅僅將php腳本作為shell腳本來運行。首先,創建在你當前工作目錄中創建一個php樣例腳本。

# echo -e '#!/usr/bin/php' phpscript.php

注意,我們在該php腳本的第一行使用#!/usr/bin/php,就像在shell腳本中那樣(/bin/bash)。第一行的#!/usr/bin/php告訴linux命令行用 php 解釋器來解析該腳本文件。

其次,讓該腳本可執行:

# chmod 755 phpscript.php

接著來運行它,

# ./phpscript.php

5. 你可以完全靠自己通過交互shell來創建簡單函數,這你一定會被驚到了。下面是循序漸進的指南。

開啟php交互模式。

# php -a

創建一個函數,將它命名為 addition。同時,聲明兩個變數 $a 和 $b。

php function addition ($a, $b)

使用花括弧來在其間為該函數定義規則。

php {

定義規則。這里,該規則講的是添加這兩個變數。

php { echo $a $b;

所有規則定義完畢,通過閉合花括弧來封裝規則。

php {}

測試函數,添加數字4和3,命令如下:

php var_mp (addition(4,3));

樣例輸出

7null

你可以運行以下代碼來執行該函數,你可以測試不同的值,你想來多少次都行。將里頭的 a 和 b 替換成你自己的值。

php var_mp (addition(a,b));php var_mp (addition(9,3.3));

樣例輸出

12.3null

創建php函數

你可以一直運行該函數,直至退出交互模式(ctrl z)。同時,你也應該注意到了,上面輸出結果中返回的數據類型為 null。這個問題可以通過要求 php 交互 shell用 return 代��� echo 返回結果來修復。

只需要在上面的函數的中 『echo『 聲明用 『return『 來替換

替換

php { echo $a $b;

php {return $a $b;

剩下的東西和原理仍然一樣。

這里是一個樣例,在該樣例的輸出結果中返回了正確的數據類型。

php函數

永遠都記住,用戶定義的函數不會從一個shell會話保留到下一個shell會話,因此,一旦你退出交互shell,它就會丟失了。

           

回復

   使用道具 舉報

返回列表

『貳』 linux伺服器上運行php,除了php-fpm還有其他的方式嗎

運行模式
關於php目前比較常見的五大運行模式:
1)cgi(通用網關介面/ common gateway interface)
2)fastcgi(常駐型cgi / long-live cgi)
3)cli(命令行運行 / command line interface)
4)web模塊模式(apache等web伺服器運行的模式)
5)isapi(internet server application program interface)

備註:在php5.3以後,php不再有isapi模式,安裝後也不再有php5isapi.dll這個文件。要在iis6上使用高版本php,必須安裝fastcgi 擴展,然後使iis6支持fastcgi。

1.1、cgi模式
cgi即通用網關介面(common gateway interface),它是一段程序,通俗的講cgi就象是一座橋,把網頁和web伺服器中的執行程序連接起來,它把html接收的指令傳遞給伺服器的執行程序,再把伺服器執行程序的結果返還給html頁。cgi 的跨平台性能極佳,幾乎可以在任何操作系統上實現。cgi已經是比較老的模式了,這幾年都很少用了。
每有一個用戶請求,都會先要創建cgi的子進程,然後處理請求,處理完後結束這個子進程,這就是fork-and-execute模式。 當用戶請求數量非常多時,會大量擠占系統的資源如內存,cpu時間等,造成效能低下。所以用cgi方式的伺服器有多少連接請求就會有多少cgi子進程,子進程反復載入是cgi性能低下的主要原因。
如果不想把 php 嵌入到伺服器端軟體(如 apache)作為一個模塊安裝的話,可以選擇以 cgi 的模式安裝。或者把 php 用於不同的 cgi 封裝以便為代碼創建安全的 chroot 和 setuid 環境。這樣每個客戶機請求一個php文件,web伺服器就調用php.exe(win下是php.exe,linux是php)去解釋這個文件,然後再把解釋的結果以網頁的形式返回給客戶機。 這種安裝方式通常會把 php 的可執行文件安裝到 web 伺服器的 cgi-bin 目錄。cert 建議書 ca-96.11 建議不要把任何的解釋器放到 cgi-bin 目錄。 這種方式的好處是把web server和具體的程序處理獨立開來,結構清晰,可控性強,同時缺點就是如果在高訪問需求的情況下,cgi的進程fork就會成為很大的伺服器負擔,想 象一下數百個並發請求導致伺服器fork出數百個進程就明白了。這也是為什麼cgi一直背負性能低下,高資源消耗的惡名的原因。

1.2、fastcgi模式
fastcgi是cgi的升級版本,fastcgi像是一個常駐 (long-live)型的 cgi,它可以一直執行著,只要激活後,不會每次都要花費時間去 fork 一次 (這是 cgi 最為人詬病的 fork-and-execute 模式)。
fastcgi是一個可伸縮地、高速地在http server和動態腳本語言間通信的介面。多數流行的http server都支持fastcgi,包括apache、nginx和lighttpd等,同時,fastcgi也被許多腳本語言所支持,其中就有php。
fastcgi介面方式採用c/s結構,可以將http伺服器和腳本解析伺服器分開,同時在腳本解析伺服器上啟動一個或者多個腳本解析守護進程。當http伺服器每次遇到動態程序時,可以將其直接交付給fastcgi進程來執行,然後將得到的結果返回給瀏覽器。這種方式可以讓http伺服器專一地處理靜態請求或者將動態腳本伺服器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。

【原理】
1)web server啟動時載入fastcgi進程管理器(iis isapi或apache mole);
2)fastcgi進程管理器自身初始化,啟動多個cgi解釋器進程 (可見多個php-cgi.exe或php-cig)並等待來自web server的連接;
3)當客戶端請求到達web server時,fastcgi進程管理器選擇並連接到一個cgi解釋器。web server將cgi環境變數和標准輸入發送到fastcgi子進程php-cgi;
4)fastcgi子進程完成處理後將標准輸出和錯誤信息從同一連接返回web server。當fastcgi子進程關閉連接時,請求便告處理完成。fastcgi子進程接著等待並處理來自fastcgi進程管理器(運行在 webserver中)的下一個連接。在正常的cgi模式中,php-cgi.exe在此便退出了。
在cgi模式中,你可以想像 cgi通常有多慢。每一個web請求php都必須重新解析php.ini、重新載入全部dll擴展並重初始化全部數據結構。使用fastcgi,所有這些都只在進程啟動時發生一次。一個額外的好處是,持續資料庫連接(persistent database connection)可以工作。

備註:php的fastcgi進程管理器是php-fpm(php-fastcgi process manager)
【優點】
1)從穩定性上看,fastcgi是以獨立的進程池來運行cgi,單獨一個進程死掉,系統可以很輕易的丟棄,然後重新分配新的進程來運行邏輯;
2)從安全性上看,fastcgi支持分布式運算。fastcgi和宿主的server完全獨立,fastcgi怎麼down也不會把server搞垮;
3)從性能上看,fastcgi把動態邏輯的處理從server中分離出來,大負荷的io處理還是留給宿主server,這樣宿主server可以一心一意作io,對於一個普通的動態網頁來說, 邏輯處理可能只有一小部分,大量的是圖片等靜態。

【缺點】
說完了好處,也來說說缺點。從我的實際使用來看,用fastcgi模式更適合生產環境的伺服器。但對於開發用機器來說就不太合適。因為當使用 zend studio調試程序時,由於 fastcgi會認為 php進程超時,從而在頁面返回 500錯誤。這一點讓人非常惱火,所以我在開發機器上還是換回了 isapi模式。對某些伺服器的新版本支持不好,對分布式負載均衡沒要求的模塊化安裝是否是更好的選擇。目前的fastcgi和server溝通還不夠智能,一個fastcgi進程如果執行時間過長會被當成是死進程殺掉重起,這樣在處理長時間任務的時候很麻煩,這樣做也使得fastcgi無法允許聯機調試。因為是多進程,所以比cgi多線程消耗更多的伺服器內存,php-cgi解釋器每進程消耗7至25兆內存,將這個數字乘以50或100就是很大的內存數。

1.3 cli模式
php-cli是php command line interface的簡稱,如同它名字的意思,就是php在命令行運行的介面,區別於在web伺服器上運行的php環境(php-cgi,isapi等)。 也就是說,php不單可以寫前台網頁,它還可以用來寫後台的程序。 php的cli shell腳本適用於所有的php優勢,使創建要麼支持腳本或系統甚至與gui應用程序的服務端,在windows和linux下都是支持php-cli模式的。
【優點】
1)使用多進程,子進程結束以後,內核會負責回收資源;
2)使用多進程,子進程異常退出不會導致整個進程thread退出,父進程還有機會重建流程;
3)一個常駐主進程,只負責任務分發,邏輯更清楚。
我們在linux下經常使用"php –m"查找php安裝了那些擴展就是php命令行運行模式;有興趣的同學可以輸入"php –h"去深入研究該運行模式。

1.4 模塊模式
模塊模式是以mod_php5模塊的形式集成,此時mod_php5模塊的作用是接收apache傳遞過來的php文件請求,並處理這些請求,然後將處理後的結果返回給apache。如果我們在apache啟動前在其配置文件中配置好了php模塊
(mod_php5), php模塊通過注冊apache2的ap_hook_post_config掛鉤,在apache啟動的時候啟動此模塊以接受php文件的請求。
除了這種啟動時的載入方式,apache的模塊可以在運行的時候動態裝載,這意味著對伺服器可以進行功能擴展而不需要重新對源代碼進行編譯,甚至根本不需要停止伺服器。我們所需要做的僅僅是給伺服器發送信號hup或者ap_sig_graceful通知伺服器重新載入模塊。但是在動態載入之前,我們需要將模塊編譯成為動態鏈接庫。此時的動態載入就是載入動態鏈接庫。 apache中對動態鏈接庫的處理是通過模塊mod_so來完成的,因此mod_so模塊不能被動態載入,它只能被靜態編譯進apache的核心。這意味著它是隨著apache一起啟動的。
apache是如何載入模塊的呢?我們以前面提到的mod_php5模塊為例。首先我們需要在apache的配置文件httpd.conf中添加一行:
loadmole php5_mole moles/mod_php5.so

這里我們使用了loadmole命令,該命令的第一個參數是模塊的名稱,名稱可以在模塊實現的源碼中找到。第二個選項是該模塊所處的路徑。如果需要在伺服器運行時載入模塊,可以通過發送信號hup或者ap_sig_graceful給伺服器,一旦接受到該信號,apache將重新裝載模塊,而不需要重新啟動伺服器。
該運行模式是我們以前在windows環境下使用apache伺服器經常使用的,而在模塊化(dll)中,php是與web伺服器一起啟動並運行的。(它是apache在cgi的基礎上進行的一種擴展,加快php的運行效率)。

1.5 isapi模式
isapi(internet server application program interface)是微軟提供的一套面向internet服務的api介面,一個isapi的dll,可以在被用戶請求激活後長駐內存,等待用戶的另一個請求,還可以在一個dll里設置多個用戶請求處理函數,此外,isapi的dll應用程序和www伺服器處於同一個進程中,效率要顯著高於cgi。(由於微軟的排他性,只能運行於windows環境)
php作為apache模塊,apache伺服器在系統啟動後,預先生成多個進程副本駐留在內存中,一旦有請求出現,就立即使用這些空餘的子進程進行處理,這樣就不存在生成子進程造成的延遲了。這些伺服器副本在處理完一次http請求之後並不立即退出,而是停留在計算機中等待下次請求。對於客戶瀏覽器的請求反應更快,性能較高。

『叄』 php 源碼怎麼本地調試

php本地測試,解決你的問題主要有2種思路:


1、windows系統下實現。

(1)去網上搜索wamp集成環境包,下載後安裝在電腦里。這個集成軟體包括了php5, apache伺服器,mysql資料庫,是windows系統下使用的。

(2)如果你不想用,也可以下載以上3個軟體,然後進行自行安裝。這種情況下,可以使用windows的iis伺服器,或apache伺服器,教程網上有,你可以自己找下。


2、linux系統下進行測試。

那麼你需要自已在電腦原有windows系統下安裝linux系統,linux可以與windows並存,也可以在虛擬機里安裝。然後,在linux下安裝php5,apache伺服器,ok後就可以進行本地開發和測試了。


記得給分!!!

『肆』 如何通過linux命令行使用和運行php腳本

  1. 在安裝完php和apache2後,需要安裝php命令行解釋器。


可以直接在linux命令行使用 phpinfo()
這個十分有價值的調試工具而不需要從文件來調用,只需執行以下命令:

3. 以交互模式運行php並做一些數學運算。這里,『-a『 選項用於以交互模式運行php。

4. 可以僅僅將php腳本作為shell腳本來運行。首先,創建在當前工作目錄中創建一個php樣例腳本。

5. 可以完全靠自己通過交互shell來創建簡單函數。

熱點內容
接龍源碼 發布:2024-11-19 10:14:48 瀏覽:33
驅動軟體哪個安卓版好 發布:2024-11-19 10:08:28 瀏覽:703
伺服器一鍵搭建java環境 發布:2024-11-19 10:08:27 瀏覽:729
布丁少兒編程 發布:2024-11-19 09:57:11 瀏覽:98
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:828
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:310
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:940
北航ftp是多少 發布:2024-11-19 09:15:32 瀏覽:822
瀏覽保存密碼如何取消 發布:2024-11-19 09:10:17 瀏覽:90
安卓怎麼關簡訊重復提醒 發布:2024-11-19 09:02:00 瀏覽:636
网站地图