當前位置:首頁 » 編程語言 » 鳥哥php

鳥哥php

發布時間: 2023-10-21 00:03:38

『壹』 php cli是守護進程的嗎

php_cli模式簡介

php-cli是php Command Line Interface的簡稱,如同它名字的意思,就是php在命令行運行的介面,區別於在Web伺服器上運行的php環境(php-cgi, isapi等) 也就是說,php不單可以寫前台網頁,它還可以用來寫後台的程序。 PHP的CLI shell腳本適用於所有的PHP優勢,使創建要麼支持腳本或系統甚至與GUI應用程序的服務端!——註:windows和linux下都支持php_cli模式

PHP-cli應用場景:

1.多線程應用
這方面的好處,引用鳥哥的話:

優點:
1. 使用多進程, 子進程結束以後, 內核會負責回收資源
2. 使用多進程,子進程異常退出不會導致整個進程Thread退出. 父進程還有機會重建流程.
3. 一個常駐主進程, 只負責任務分發, 邏輯更清楚.

php的多線程—沒錯就是php多線程應用,雖然大家都普遍認為php沒有多線程(curl屬於模擬多線程而不是真實的),但是在php_cli模式下的php徹底的是屬於多線程。這個時候php屬於linux的一個守護進程。 在本人之前寫過的《PHP多線程批量採集下載美女圖片(續)》的時候在採集程序里雖然使用curl來模擬多線程,但是在瀏覽器執行的時候也是會遇到執行超時或內存abort而導致程序中斷,(要嘗試幾次才可以徹底成功),但是如果在php-cli模式下執行,你就會發現這個程序執行的很快,php多線程執行的優勢被徹底表現出來了.

備注:這種多線程方式不是很成熟,不適合大規模的生成應用,偶爾使用還是可以的

2.定時執行php程序

利用linux的cron方式,那麼這個方式是如何定時執行php程序?請看下文

3.開發桌面程序

你可以做您的Windows或Linux中使用PHP的圖形用戶界面(GUI)應用!所有你需要的是PHP的命令行介面和一包GTK。這將允許建立真正的攜帶型圖形用戶界面應用程序(呵呵,之前只是知道php可以做桌面程序,現在才知道是使用php_cli模式),並且不需要學習別的。

4.編寫PHP的shell腳本
如果你不會bash shell或者Perl等的使用,但是你又需要一些腳本去執行的時候,怎麼辦?這個時候你完全可以使用你熟悉的php編寫shell腳本,這個時候你是不是突然感覺PHP是不是太強大了!—–真正做到一種語言,到處開發!

PHP_CLI使用方法

win下面的執行方法:
假設php.exe 在D:xamppphp在dos命令在可以這個執行:

復制代碼 代碼如下:D:xamppphpphp.exe D:xampphtdocstest.php

就可以執行test.php這個文件了 。這里推薦win平台下xampp集成環境,真正比wamp強大N倍,這個集成包可以直接進入dos模式。

linux下php_cli使用
首先找到你安裝php的路徑,以我為例:



當然實現的方法不止一個,大家可以嘗試其他方法實現!

例外關於php的cli還有很多參數可以加入:具體可以參考:http://php.net/manual/en/features.commandline.php

關於定時執行
cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業,周期性作業,比如備份數據 打開/etc/crontab,添加:
復制代碼 代碼如下:
/usr/bin/php -f /data/htdocs/test.php

『貳』 深入PHP中的HashTable結構詳解

深入PHP中的HashTable結構詳解

深入PHP中的HashTable結構詳解

對php內核有一定了解的人應該都知道php的精髓就是HashTable,HashTable在php的實現中無處不在。包括php的數組、什麼全局變數、局部變數的作用域等等,php的hashtable拆開來說就是四部分:

hash函數:用的是time33的散列函數,將一個字元串的key轉換成一個數字

一個C數組:用來儲存桶(buckets)的

兩個雙向的鏈表:第一個雙向鏈表是數組的每個元素(桶bucket)是一個雙向鏈表,這樣做是為了解決hash沖突;第二個雙向鏈表是數組將每一個桶(bucket)連接起來,這里要連接的也就是第一個雙向鏈表的鏈表頭,這樣做是為了遍歷整個hash表用的,鳥哥有篇blog是講php的foreach的,這里這樣設計就是給foreach用的==>《深入理解PHP之數組(遍歷順序)》

我這里不再說hashtable的struct和bucket的`struct了,因為下面的推薦鏈接幾乎都講了,我不覺得我能描述和說的比他們好,每個人的水平不一樣,我就以我現在的技術水平來描述,所以我就只把我整理的一些東西記錄一下

下面是php中hash實現的兩個文件:zend_hash.c zend_hash.h。這兩個文件裡面實現了一堆的api,也引申出了一堆的api,下面是實現出來的api的原型

復制代碼 代碼如下:

ZEND_API ulong zend_hash_func(const char *arKey, uint nKeyLength)

ZEND_API ulong zend_get_hash_value(const char *arKey, uint nKeyLength)

ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunction, dtor_func_t pDestructor, zend_bool persistent ZEND_FILE_LINE_DC)

ZEND_API void zend_hash_set_apply_protection(HashTable *ht, zend_bool bApplyProtection)

ZEND_API int _zend_hash_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_quick_add_or_update(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int _zend_hash_index_update_or_next_(HashTable *ht, ulong h, void *pData, uint nDataSize, void **pDest, int flag ZEND_FILE_LINE_DC)

ZEND_API int zend_hash_rehash(HashTable *ht)

static int zend_hash_do_resize(HashTable *ht)

ZEND_API int zend_hash_del_key_or_index(HashTable *ht, const char *arKey, uint nKeyLength, ulong h, int flag)

ZEND_API void zend_hash_destroy(HashTable *ht)

ZEND_API void zend_hash_clean(HashTable *ht)

static Bucket *zend_hash_apply_r(HashTable *ht, Bucket *p)

ZEND_API void zend_hash_graceful_destroy(HashTable *ht)

ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)

ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *argument TSRMLS_DC)

ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func_args_t apply_func, int num_args, …)

ZEND_API void zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)

ZEND_API void zend_hash_(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size)

ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, void *tmp, uint size, int overwrite ZEND_FILE_LINE_DC)

static zend_bool zend_hash_replace_checker_wrapper(HashTable *target, void *source_data, Bucket *p, void *pParam, merge_checker_func_t merge_checker_func)

ZEND_API void zend_hash_merge_ex(HashTable *target, HashTable *source, _ctor_func_t pCopyConstructor, uint size, merge_checker_func_t pMergeSource, void *pParam)

ZEND_API int zend_hash_find(const HashTable *ht, const char *arKey, uint nKeyLength, void **pData)

ZEND_API int zend_hash_quick_find(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h, void **pData)

ZEND_API int zend_hash_exists(const HashTable *ht, const char *arKey, uint nKeyLength)

ZEND_API int zend_hash_quick_exists(const HashTable *ht, const char *arKey, uint nKeyLength, ulong h)

ZEND_API int zend_hash_index_find(const HashTable *ht, ulong h, void **pData)

ZEND_API int zend_hash_index_exists(const HashTable *ht, ulong h)

ZEND_API int zend_hash_num_elements(const HashTable *ht)

ZEND_API int zend_hash_get_pointer(const HashTable *ht, HashPointer *ptr)

ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)

ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)

ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_ex(const HashTable *ht, char **str_index, uint *str_length, ulong *num_index, zend_bool plicate, HashPosition *pos)

ZEND_API int zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos)

ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosition *pos)

ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)

ZEND_API int zend_hash_sort(HashTable *ht, sort_func_t sort_func, compare_func_t compar, int renumber TSRMLS_DC)

ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered TSRMLS_DC)

ZEND_API int zend_hash_minmax(const HashTable *ht, compare_func_t compar, int flag, void **pData TSRMLS_DC)

ZEND_API ulong zend_hash_next_free_element(const HashTable *ht)

void zend_hash_display_pListTail(const HashTable *ht)

void zend_hash_display(const HashTable *ht)

;

『叄』 php與python誰更適合web開發為什麼

就單純PHP和python比較的話,甚至說是強大的java(Java的優勢是復雜業務邏輯,企業級應用,當然電商領域例如阿里也喜歡)來說,PHP就是為Web而生的!

我是PHP,你們都知道我有多優秀嗎?

目前全世界有80%以上的WEB網站都是PHP開發!全世界3000萬(全球總共5000萬網站體量,源畝激也就是說6成以上的比例)以上的網站使用PHP編程,Web領域也許PHP是最好的語言之一(不違反廣告法!)。

目前全世界一大批優秀的企業都在用PHP,這些企業著名的有Facebook、Twitter、騰訊、微博、網路等等企業,都是將PHP作為主力主要技術選型,本來淘寶也是,後來因為阿里搞不定PHP,就去sun公司弄來了一群Java高手重構了整個淘寶。

全世界最優秀的CMS系統Wordpress也是PHP開發的!而且基於PHP的開源系統簡直是數不勝數。

當然其實還有很多,為什麼PHP會成為最重要的Web開發語言,能做web開發的編程語言很多,但是PHP開發效率高、開發成本更低,所以自然成了一個不錯的選擇!

我不是梅西,也不是天生要強,我只是擅長Web!

從技術層面來講,PHP本質上就是為web而生的,能做web的編程語言很多,但是PHP就放佛是對C封裝了所有適合做業務開發、Web開發的特性,完全開源,可以完全根據自己的需要定製php解釋器,語法比java簡單,上手極快,會C語言的話基本上就直接可以寫php!

PHP兩三天就能搞一個留言板,Java估計很多人兩三天還在考慮怎麼把項目配好,這對於中小型項目可以說得不償失,因為你要花大量的時間去做預備工作!至於python要了老命了,先把python2和python3掰扯清楚吧。

雖然PHP的語法一直讓人詬病,但是這傢伙跟JavaScript、html、C這些語言相處的太好了,PHP可以直接嵌入HTML開發,如果有搞不定的,那就交給C吧!並且做PHP你只要做好業雹襪務就可以了,其他的也都交給C吧!這貨跟C簡直相處太好了,要知道PHP的核心開發鳥哥其實是個C程序員(嚴肅臉)!

我是PHP,我很有魅力,太多人想獨寵我一人

開耐春源社區強大,大家總想著為PHP做點什麼,並且這年頭能勾搭一個大款是多麼棒的一件事情,然而PHP勾搭了一群有錢人!有大哥C/Unix在前面鋪路,Linux、Apache、Mysql這些有實力有地位的江湖大佬,他們組成了一個強大的黑幫叫做:LAMP!但是他們之間的兄弟之情非常深厚。

同時,很多開發者也願意為PHP的開發者生態做貢獻,Python好意思說自己有開發者生態么?至於Java確實強大,但這玩意兒也夠你喝一壺了!

所以PHP本身就是為了web而生的!本來不同語言都有自己的特定的應用領域,比如Java更適合做企業應用以及電子商務網站後台,尤其擅長處理大規模的數據,做大數據開發,而Python在爬蟲、人工智慧、網路等等領域擁有很大優勢。而PHP就是為web而生的,、。

『肆』 鳥哥的linux私房菜和搞php的那個鳥哥是同一人嗎

根本不是同一人,原因如下:

linux私房菜是蔡德明,PHP是惠新宸。

『伍』 關於php學習,哪個網站資料比較合適

做PHP相關工作已經有7年了,如果是初學者,推薦有兩個PHP100PHP CHINA.


PHP100

-------------

PHP100中文網是國內第一家以PHP資源分享為主的專業網站,也提供了PHP中文交流社區。面向PHP學習研究者提供:最新PHP資訊、原創內容、開源代碼和PHP視頻教程等相關內容。

PHP100中的100個視頻,雖然看著有點多,但是如果想入門的話,10幾個視頻就可以了,這裡面不僅有入門的教程,還有中階、高階的教程,完全可以把你從一個什麼都不懂的PHP菜鳥,變成PHP的使用高手。

介紹php開發環境,讓您快速搭建您的工作環境,測試環境,開始PHP的編程之旅;php開發工具

,工欲善其事必先利其器,IDE,資料庫管理,版本控制等等,稱心..,帶你進行PHP語言開發,手把手在視頻教程中教你如何開發一個留言板功能,學會這些,你就可以入門了。

當然如果遇到問題怎麼辦,PHP100還有一個技術論壇,分類也很全,不僅包含PHP技術相關的內容,還包含PHP相關的好多技術語言,例如linux、apache、mysql、javascript、ajax等等。


PHP CHINA

----------------

之所以推薦這個,是因為,N年前我自己就是在這里進行過培訓的學員,也是深受益處,還有個很出名的開源論壇也是出自這里的,Discuz! ,這里不僅有學習相關的資料,也可以報名進行培訓,還可以學習Discuz!相關的源碼

當然這里也有一個屬於自己的論壇,裡面有一部分人都是初學者,都是在這里做培訓的學員,所以會看到很多初級的問題,也可以提一些基礎問題,很多人會幫你解答。


當然別的地方也會有很多資料很全的網站,以上兩個只是個人推薦,希望對你有幫助

『陸』 現在php技術要學習哪些內容

基礎:搭建lamp環境,php語言(函數,結構,資料庫Drivers)
中級:緩存(redis、memcache等),資料庫設計(主從分離),伺服器配置(linux系統學習、動靜分離、負載均衡等)
高級:熟練運用各大框架(thinkphp、CI、YII、laravel等)建議:thinkphp最簡單,可以由此入門
骨灰級:研究php語言核心,加入php核心團隊,做文檔,拓功能,推動php發展(膜拜鳥哥)

『柒』 PHP的哪個MVC框架最值得推薦

1、Laravel,laravel這個框架很有意思,定時任務,數據遷移,大概你能在web中想到的功能這個框架都可以提供,它的路由借鑒了Ruby on Rails 和Python的flask框架,但是還提供了web方面其它的一些功能,你可以把它想像成PHP中像Java一樣強大的Web中的瑞士軍刀,前提是你不考慮性能,因為它的實現使用了大量的閉包和反射,大概在PHP里嚴格引入設計模式的也只有這個了。
生產效率:5星
學習難度:5星(5星為最難,學習成本最高,下同)
性能:2星
社區活躍:4星(社區活躍可以很方便的找到別人已經開發的功能,專指中文文檔,組件豐富性)
2、ThinkPHP5,大概3年前研究過TP3源碼,使用起來簡單,因為自動載入的問題,性能是個坑,現在發展到5,個人認為已經是一個相當優秀的框架了,路由定義簡單,配置簡單,文檔豐富,社區也相當活躍
生產效率:5星
學習難度:1星
性能:4星
社區活躍:4星
3、Yii2,Yii2的路由分發跟TP5稍微有點不一樣,也使用了反射的功能,自動載入現在都使用的composer,大體上都差不多,都有延時載入,Yii2的路由相對智能一些,不用去手動維護,類似於TP3所以使用起來也是很方便,性能比TP5應該略差點,沒測試過,從源碼來看
生產效率:5星
學習難度:2星
性能:3.5星
社區活躍:4星(很多強大的組件,你只要下載就行了,會省很多事)
4、CakePHP,這個框架內部的封裝性看上去沒上面那幾個優美,但是它自己實現了use關鍵字功能,所以兼容性來看應該是比上面那幾個好點的,但這在新項目上應該不是問題,新項目上PHP7,啥都別想,准沒錯。它的路由定義類似於TP5但是稍微多點功能,不過其實是個雞肋。中文文檔就不說了,很不好找。不過也算是個相對簡單的框架嚴格遵循MVC
生產效率:3星
學習難度:3星
性能:4星
社區活躍:2星
5、Workman,這個框架相當強大,如果你要實現一些復雜的協議或者用php做一些websocket推送或者TCP/UDP伺服器的話,這個框架可能可以滿足你的需求,也有一些非同步的組件,比較高級的框架,初中級程序員可能用不上
生產效率:3星
學習難度:4星
性能:3星
社區活躍:2星
6、swool,這是個相當有意思的框架,性能很強大,旁友,你聽說過非同步編程的nodejs,python的tornado框架嗎,這個在php里做的就是一個這樣的事情,國內的一位老兄開發的C擴展,用php來非同步編程,看了下文檔,稍微做了個性能測試,相當優秀,就是不知道在項目中重度使用會不會踩到什麼坑,而且這也是一個相當高級的框架。大部分人可能直接轉node了吧,畢竟node生態環境已經相當好了,總之,如果你想用php試試非同步編程來提高性能,非這個框架莫屬。性能獨一檔,編程難度也相對高一些,你需要有些進程的理論基礎
生產效率:3星
學習難度:4星
性能:6星
社區活躍:2星
7、Yaf,鳥哥寫的c擴展框架,然而你要自己實現很多輪子,生態環境是個大問題。
生產效率:4星
學習難度:4星
性能:5.5星
社區活躍:2星
其它框架還沒怎麼了解,國內的話,根據具體業務,選上面幾個,沒錯。

熱點內容
如何讓給文件夾設置密碼查看 發布:2025-01-31 22:49:07 瀏覽:2
配置動態路由協議配錯了怎麼改 發布:2025-01-31 22:49:07 瀏覽:77
掃行程碼為什麼需要支付密碼 發布:2025-01-31 22:47:08 瀏覽:738
什麼樣的配置能玩地平線4 發布:2025-01-31 22:44:05 瀏覽:241
python正則表達式符號 發布:2025-01-31 22:43:50 瀏覽:391
androidmime 發布:2025-01-31 22:34:44 瀏覽:782
ftp和http的中文含義是 發布:2025-01-31 22:33:48 瀏覽:402
sqlite3存儲圖片 發布:2025-01-31 22:27:14 瀏覽:162
sqlserverphp 發布:2025-01-31 22:22:55 瀏覽:877
曲馬多存儲 發布:2025-01-31 22:22:52 瀏覽:538