v8引擎的php擴展(php v8js 擴展)

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:44
下一篇 2024-11-27 05:44

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Java2D物理引擎簡介及應用

    本文將介紹Java2D物理引擎的基本概念、實現原理及應用案例,以及對應代碼示例。 一、物理引擎概述 物理引擎是一種計算機程序,用於模擬物理系統中的對象和其互動,如重力、碰撞、彈力等…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • 資料庫存儲引擎

    一、什麼是資料庫存儲引擎 資料庫存儲引擎是資料庫系統中的核心組件之一,它存儲、訪問和管理數據。 存儲引擎是資料庫系統中與底層存儲操作相關的部分,負責將數據存儲到物理介質上,控制數據…

    編程 2025-04-25
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24

發表回復

登錄後才能評論