搜尋

隨機推薦

28 十一月 2009
12 八月 2013

http://i.imgur.com/Ie41hDj.png

 

消息隊列處理後台任務帶來的問題

項目中經常會有後台運行任務的需求,比如發送郵件時,因為要連接郵件服務器,往往需要5-10秒甚至更長時間,如果能先給用戶一個成功的提示信息,然後在後台慢慢處理發送郵件的操作,顯然會有更好的用戶體驗。

為了實現類似的需求,Web項目中一般的實現方法是使用消息隊列(Message Queue),比如MemcacheQRabbitMQ等等,都是很著名的產品。

http://i.imgur.com/7JtSNUu.png

PHP語言的排名變化

根據“TIOBE編程語言排行榜”(榜單雖然統計方式有侷限,但是仍然不失為一個比較好的參考),2010年PHP最高曾經在世界編程語言中排名第三。可見,PHP語言在PC互聯網時代的Web領域可謂叱咤風雲,擎天一柱。 

 

Zend Framework 3框架即將推出 支持PHP7_天極yesky軟件頻道

近日PHP開發框架Zend Framework透露未來技術計畫,表示將在2015年第三季度推出Zend Framework的第3版。

  新版框架將支持新一代的PHP 7語言,可同時用於開發網頁及移動應用,同時改善了效能及提高重複利用性。例如Zend Framework 3將採取松耦合架構的設計,目標是讓用戶可以獨立使用不同組件,組件與組件之間幾乎不存在互相依賴的關係,Zend Framework稱此為Use-At-Will架構。  

1、古老的欺騙sql語句

在默認模式下,即使是你忘了把php.ini拷到/usr/local/lib/php.ini下,php還是打開magic_quotes_gpc=on。

這樣所有從get/post/cookie來的變量的單引號(')、雙引號(")、反斜槓backslash()以及空字元nul
(the null byte)都會被加上反斜槓,以使數據庫能夠正確查詢。

但是在php-4-rc2的時候引入了一個配置文件php.ini-optimized,這個優化的php.ini卻是 
magic_quotes_gpc=off的。某些網管看到optimized字樣也許就會把php.ini-optimized拷到 
/usr/local/lib/php.ini,這時就比較危險。像比較簡單的驗證,假設沒有過濾必要的字符: 
select * from login where user='$http_post_vars[user]' and pass='$http_post_vars[pass]' 
我們就可以在用戶框和密碼框輸入1『 or 1='1通過驗證了。這是非常古董的方法了,這個語句會 
替換成這樣:

select * from login where user='1' or 1='1' and pass='1' or 1='1'

因為or 1='1'成立,所以通過了。

解決的辦法最好就是過濾所有不必要的字符,還有就是推薦對於從get/post/cookie來的並且用在sql 
中的變量加一個自定義的函數:

function gpc2sql($str) { 
    if(get_magic_quotes_gpc()==1) 
        return $str; 
    else 
        return addslashes($str); 
}

主要是為了你的程序能安全移植在各種系統裡。

 

 

[PHP]


;;;;;;;;;;;;;;;;;;;
; PHP.INI中文說明 ;
;;;;;;;;;;;;;;;;;;;
; 這個檔案是PHP安裝的預設配置檔案.
; 預設設定下, PHP是以程式開發為目的,而不是為了其它目的!
; 由於PHP在應用在您的網站之前必須考慮一些安全問題,
; 所以請您參考php.ini-recommended(被推薦的)中相關參數的設定,
; 另外,您也可以在以下網站獲得幫助:http://php.net/manual/en/security.php.

PHP經過長時間的發展,很多用戶都很了解PHP了,這裡我發表一下個人理解,和大家討論討論PHP命令行。 PHP Command Line Interface (CLI) Server Application Programming Interface (SAPI)在PHP V4.2.0開始發布,用於試驗目的。到V4.3.0時,已經受到完整支持並且默認啟用。

 

PHP CLI SAPI允許您開發PHP支持的shell腳本,甚至是基於桌面的腳本。事實上,可以用PHP命令行運行的工具。採用這種方式,PHP開發人員可以像 Perl、AWK、Ruby 或shell程序員一樣高效。本文探究構建到PHP中的工具,讓您了解PHP運行的底層shell環境和文件系統。 PHP為執行外部命令提供大量函數,其中包括shell_exec()、exec()、passthru()和system()。這些命令是相似的,但為 您運行的外部程序提供不同的界面。所有這些命令都衍生一個子進程,用於運行您指定的命令或腳本,並且每個子進程會在命令輸出寫到標準輸出(stdout)時捕捉它們。

介紹

再撰寫PHP網站時,發送e-mail是一個經常使用的功能,PHP本身就有提供寄送e-amil的功能可以使用,就是利用mail( )這個函式,有關mail( )如何使用可參考:http://tw2.php.net/mail。

但是PHP內建的mail( )功能並不完善,以我所碰到的經驗為例,最基本的就是只能寄送文字e-mail,但時至今日,很多e-mail大多以HTML格式為主,除了能夠插入圖之外,e-mail的文字顯示也具有較豐富的變化。

首先,要先知道怎麼在php裡執行外部指令

請看

稍微介紹一下 passthru()

passthru
(PHP3 , PHP4)
passthru --- 執行外部程式並且顯示未加工的(raw)輸出

語法 :
void passthru(string command [, int return_var])

 

 

 

說明 :

passthru( )類似於exec( ),如果有給予參數return_var,則傳回的Unix命令的狀態將會放在這裡。從Unix命令輸出的是二進制資料,這些資料需要直接地傳送到瀏灠器時,可用此函式來代替exec( )或system( )。用來執行像是pbmplus效用的指令,可以直接地輸出圖形資料流,設定content-type為image/gif,然後呼叫pbmplus程式來輸出一個gif,你可以建立PHP程式直接地輸出圖形。

注意 : 如果你使用此函式來啟動一個程式,而且希望在背景裡(background)執行的時候離開它,你必須確定此程式的輸出是轉向(redirected)到一個檔案或是一些輸出的資料流,否則PHP將會懸掛(hang)直到程式執行結束。

 

因此如果想要在後台執行指令, 請參考此例

$cmd = 'upgrade > /dev/null &';
passthru($cmd);

這幾個function的區別:

  • system()輸出並返回最後一行shell結果。
  • exec()不輸出結果,返回最後一行shell結果,所有結果可以保存到一個返回的數組裡面。
  • passthru()只調用命令,把命令的運行結果原樣地直接輸出到標準輸出設備上。

 


相同點:都可以獲得命令執行的狀態碼

demo:
//system('dir');
// exec ('dir');
// passthru ('dir');
// echo `dir`;

PHP作為一種server端的腳本語言,可以編寫簡單與複雜的動態網頁功能,PHP能夠完全勝任。

但有時為了實行某些功能,筆續透過外部的shell script或是指令(或稱為命令),可以比較有效率的完成目的。

那麼,是否可以在PHP中執行外部指令呢? 可以只要用一個或幾個function即可

第 1 頁,共 4 頁

Please publish modules in offcanvas position.