本文目錄一覽:
- 1、php常用擴展有哪些
- 2、nodejs php哪個好
- 3、什麼是Google V8 JavaScript引擎
- 4、如何編寫一個PHP的C擴展
- 5、PHP7.0怎麼通過打開擴展功能和mysql相連?
php常用擴展有哪些
php基本使用到的擴展有如下:
bcmath(精確數值處理)
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gettext
hash
iconv
igbinaryinotify 文件監控
json
libxml
mbstring
mhash
mysql
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
readline
redis Redis緩存
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
sysvmsg
sysvsem
sysvshmswoole 通信引擎
tokenizer
wddx
xml
xmlreader
xmlwriter
xslyaf YAF框架必須
zip
zlib
其中最常用的擴展有:curl date json mysql mysqli openssl pdo_mysql redis session zip等
查看當前php安裝了哪些擴展,可以使用命令:php -m
nodejs php哪個好
Node.js發佈於2009年5月,由Ryan Dahl開發,是一個基於Chrome V8引擎的JavaScript運行環境,使用了一個事件驅動、非阻塞式I/O模型, 讓JavaScript 運行在服務端的開發平台,它讓JavaScript成為與PHP、Python、Perl、Ruby等服務端語言平起平坐的腳本語言.
PHP即「超文本預處理器」,是一種通用開源腳本語言。PHP是在伺服器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利於學習,使用廣泛,主要適用於Web開發領域。
Node.js遵循事件驅動的非阻塞I/O模型,PHP遵循一個阻塞模型;
PHP應用程序可以在任何伺服器上運行,Node不行。
1、性能方面:
由於 Node.js 遵循事件驅動的非阻塞I/O模型,與傳統的後端技術相比,Node.js 能夠處理大量的伺服器請求。PHP 遵循一個阻塞模型,其中在伺服器端創建多個線程來處理多個客戶端請求,如果代碼沒有被優化,它會導致高伺服器負載和響應時間。
2、託管和部署:
PHP 應用程序可以在包括 Nginx 和 Apache 以及 Windows 和 Linux 平台在內的任何伺服器上運行,這使得部署過程變得更容易。
而 Node.js,則需要具有 SSH 訪問許可權的虛擬伺服器。因此,在沒有任何控制台命令和 Secure Shell(SSH)知識的情況下,用 PHP 部署小型企業和個人應用會更好。
3、外部依賴:
Node.js 依賴關係較少,用幾行代碼就可以設置一個 Web 伺服器。但運行 PHP 應用程序,就需要外部伺服器軟體。用 Node.js 的開發人員只需要 NPM(節點包管理器)就可以下載 Node 模塊,這些模塊可以輕鬆地集成到應用程序中,提供額外的功能。
4、CPU 擴展任務:
Node.js 可能在高吞吐量方面表現優異,但是當應用程序繁重,需要 CPU 做大量工作時,Node.js 肯定會有所欠缺。在這種情況下,PHP 最適合做 Web 應用程序的後端。
5、單頁應用程序:
如果您使用過 Gmail,那麼您可能知道什麼是單頁應用程序(Single Page Application)。Web 應用程序在初始客戶端請求時載入,之後根據客戶端請求刷新的網頁的特定部分。Node.js 與 AngularJS 的聯合是開發單頁應用程序的完美方案。
6、開發環境:
Node.js 可以用於桌面應用程序開發(Windows,Linux和Mac),移動應用程序開發(混合和跨平台應用程序),甚至構建基於控制台的應用程序。雖然有一些也可以使用 PHP 來開發,但是大多數開發人員不會這樣做。
7、社區支持:
由於 PHP 比 Node.js 早誕生將近20年,所以在文檔,API 和代碼庫等在線資源方面更為豐富。所以很有可能其他人也嘗試了你想要用代碼完成的事情並從中獲得了幫助。
另一方面,Node.js 雖然已經得到了開發者和組織的廣泛關注,但是它支持開發者開發的資源缺相當少。
8、學習曲線:
編寫 Node.js 代碼對於新手甚至是專業的 JavaScript 開發人員來說都不是件容易的事情,因為他們需要在入門之前理解一些複雜的概念,比如 web worker 和回調函數。相反,PHP是一門非常友好的編程語言對於開發 Web 應用程序的新手來說。
Node.js 和 PHP是相輔相成的,因為這兩種技術都有各自的優點和缺點。這大多是相似的情況在比較或選擇用於Web,桌面和移動開發的其他技術時。Node.js有前途,並且肯定會佔據PHP市場的一部分,但是不能完全取代 PHP。
什麼是Google V8 JavaScript引擎
V8是一個由丹麥Google開發的開源JavaScript引擎,用於Google Chrome中。[2]Lars Bak是這個項目的組長。[3]
V8在執行之前將JavaScript編譯成了機器碼,而非位元組碼或是直譯它,以此提升效能。更進一步,使用了如內聯緩存(inline caching)等方法來提高性能。有了這些功能,JavaScript程序與V8引擎的速度媲美二進位編譯。[4]
傳統的javascript是動態語言,又可稱之為Prototype-based Language,JavaScript繼承方法是使用prototype,透過指定prototype屬性,便可以指定要繼承的目標。屬性可以在運行時添加到或從對象中刪除,引擎會為執行中的物件建立一個屬性字典,新的屬性都要透過字典查找屬性在內存中的位置。V8為object新增屬性的時候,就以上次的hidden class為父類別,創建新屬性的hidden class的子類別,如此一來屬性訪問不再需要動態字典查找了。
為了縮短由垃圾收集造成的停頓,V8使用stop-the-world, generational, accurate的垃圾收集器。[5]在執行回收之時會暫時中斷程序的執行,而且只處理物件堆疊。還會收集內存內所有物件的指標,可以避免內存溢位的情況。V8組譯器是基於Strongtalk組譯器。[6]。
如何編寫一個PHP的C擴展
一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13
一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13
# cd /software/php-5.2.13/ext
二、假設我們要開發一個名為caleng_module的擴展,該擴展包含兩個函數:a–處理兩個整型相加和b-處理字元串重複輸出;
1、首先編寫一個函數定義文件,該文件編寫函數原型後綴為def,假設為:caleng_module.def
int a(int x, int y)
string b(string str, int n)
2、通過擴展骨架生成器,將在ext目錄下自動建立擴展目錄caleng_module
# ./ext_skel –extname=caleng_module –proto=caleng_module.def
3、修改配置文件: # vim /software/php-5.2.13/ext/caleng_module/config.m4,將如下行的注釋標籤”dnl”去掉,修改後如下所示:
PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,
Make sure that the comment is aligned:
[ –enable-myfunctions Enable myfunctions support])
4、完善函數a和b的功能: # vim /software/php-5.2.13/ext/caleng_module/caleng_module.c
PHP_FUNCTION(a)
{
int x, y, z;
int argc = ZEND_NUM_ARGS();
if (zend_parse_parameters(argc TSRMLS_CC, “ll”, x, y) == FAILURE)
return;
z = x + y;
RETURN_LONG(z);
}
PHP_FUNCTION(b)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
long n;
char *result;
char *ptr;
int result_length;
if (zend_parse_parameters(argc TSRMLS_CC, “sl”, str, str_len, n) == FAILURE)
return;
result_length = str_len * n;
result = (char *) emalloc(result_length + 1);
ptr = result;
while (n–) {
memcpy(ptr, str, str_len);
ptr += str_len;
}
*ptr = ‘\0’;
RETURN_STRINGL(result, result_length, 0);
}
三、編譯安裝,假設php的安裝目錄為:/usr/localhost/webserver/php
# cd /software/php-5.2.13/ext/caleng_module
# /usr/localhost/webserver/php/bin/phpize
# ./configure –with-php-config=/usr/localhost/webserver/php/bin/php-config
# make
# make install
現在將在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目錄下生成caleng_module.so文件
在php.ini配置文件中加入: extension=caleng_module.so.
搞定收工
PHP7.0怎麼通過打開擴展功能和mysql相連?
第一步:進入php源碼中的”ext/mysql”目錄下
第二步:在當前目錄下運行phpize命令:/usr/local/php524/bin/phpize
phpize的規則:去哪個目錄下運行phpize文件,那麼就會在該目錄下生成一個configure文件。
第三步:運行剛才生成的configure文件
命令: ./configure –with-php-config=/usr/local/php524/bin/php-config –with-mysql=/usr/local/mysql/
這裡最關鍵的是通過–with-mysql參數告訴mysql客戶端的位置。這樣才能生成mysql.so。
實驗的時候,沒有加這個參數,結果錯誤:
./configure –with-php-config=/usr/local/php524/bin/php-config
第四步:編譯生成.so文件
第五步:配置php引擎載入該擴展。
補充一下:就是去php.ini文件中修改一下配置,載入mysql.so這個擴展(這個擴展文件要放到php指定的擴展目錄下面去)
第六步:測試php引擎是否成功載入該擴展編寫文件phpinfo.php,內容是:?php ehco phpinfo(); ?
運行後,可以看到有如下信息顯示:mysqlMySQLSupport enabledActive PersistentLinks 0
Active Links 0
Client API version 5.1.55
MYSQL_MODULE_TYPE no value
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_INCLUDE no value
MYSQL_LIBS no value
通過這樣的方式可以確認,php引擎已經成功載入了mysql.so擴展。
第七步:已經生成的mysql.so。編寫php代碼測試是否能連接mysql。
一、為什麼書中一般是常常是這樣的順序安裝。
先安裝mysql,然後再安裝php,很少看到先安裝php,後安裝mysql?
這樣做。是基於下面原因:安裝好mysql後。mysql.so這個模塊才能生成。記得一個細節:在安裝php的時候,需要提供mysql的路徑。由php幫助編譯生成mysql.so模塊。mysql.so這個模塊是在安裝好php的時候生成的。
生成這個模塊需要用到一個東西:mysql客戶端。如果先安裝php,後安裝mysql。那麼無法按照原來的方式(由php幫助生成mysql.so模塊)掛接mysql.so。通過實踐,發現使用phpize工具生成mysql.so可以解決這個問題。
二、實踐生成mysql.so的過程。
大體思路:需要用到php的源碼包才行。通過源碼包中提供的phpize文件(一個專門掛接php擴展的工具)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/186173.html