blog.Ring.idv.tw

Articles

寫一個Hello World的PHP Extension

Java中我們可以透過JNI的方式來進行和C語言的溝通~ 而這不外乎要遵循一些共通的介面來達到~ 當然PHP也是如此~ 有興趣的話可以看看「PHP Source Code/ext」底下的一些extension,像是PDOGD等等~ 都是這樣達成的~

所以像Youtube這樣用PHP寫成的網站還要結合後端轉檔程式該怎麼做呢?

由於筆者不是Youtube的工程師~ 恕無法提供正解~ XD

不過若要比較「完善」地結合像FFmpeg這樣的函式庫~ 那採用寫一個PHP Extension的方式倒是不錯的解決方案~

所以本文主要的訴求就在於開發一個屬於自己的Hello World的PHP Extension。

hello.c

#include "php.h"

ZEND_FUNCTION(hello);
zend_function_entry hellomodule_functions[] =
{
    ZEND_FE(hello, NULL)
    {NULL, NULL, NULL}
};
zend_module_entry hellomodule_module_entry =
{
    STANDARD_MODULE_HEADER,
    "Hello Module",
    hellomodule_functions,
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL,
    NO_VERSION_YET,
    STANDARD_MODULE_PROPERTIES
};

#if COMPILE_DL_FIRST_MODULE
ZEND_GET_MODULE(hellomodule)
#endif

ZEND_FUNCTION(hello)
{
	RETURN_STRING("HELLO WORLD",1);
}

Compiling

先進行編譯處理~

gcc -fpic -DCOMPILE_DL_FIRST_MODULE=1 -I/usr/local/include -I. -I/usr/include/php5 -I/usr/include/php5/Zend -I/usr/include/php5//main -I/usr/include/php5/TSRM -c -o hello.o hello.c

Linking

然後產生一個Shared Object~

gcc -shared -L/usr/local/lib -rdynamic -o hello.so hello.o

掛上hello module

cp hello.so /usr/lib/php5/20060613+lfs/

修改「php.ini」,加上「extension=hello.so]~ 然後重新啟動您的Apache Server

vi /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart

最後用「phpinfo()」來驗證是否已掛上自己的Extension~ 成功的話會看到下圖:

測試HelloWorld

<?php
echo hello();
?>

看到畫面出現「HELLO WORLD」就成功啦! ^^

不過如果您不想那麼麻煩的掛載extension,也可以考慮用「dl()」來動態載入達成~

相關細節可以參考下述資源~

參考資源

PHP: Creating Extensions - Manual

PHP: Source Discussion - Manual

Extension Writing - devzone.zend.com

類似文章

用Java來和C做溝通的介面 - JNI

2008-04-25 21:28:18 | Comments (9)

Google 2008 台北程式開發日

來吧~ 來去參加「Google 2008 台北程式開發日」~ ^^ 其實最想要的是Google的T-Shirt~ 哈哈~ 當天就給它換上試穿~ 嘻嘻~

議題

.雲端運算

.Gears codelab

.Advanced Maps API

.Android應用入門

.GData API

.Maps API Case Study

.OpenSocial:社交網站的標準

P.S. 話說我的指導教授要準備三台電腦給我玩Hadoop~ 嘿嘿~ 雖然比不上UMD有IBM提供的40台~ 不過對我來說~ 夠了~ 來吧~ 我也準備好了 ^^

2008-04-24 01:00:36 | Add Comment

取得MediaWiki Editable Text

這個小範例主要是用來取得目前最多人用的Wiki架站軟體「MediaWiki」的編輯文字~

筆者使用「HttpClient - a PHP Web Client Class」來當作我的HttpRequest Library,內部程式是直接開啟Socket去連線的~ 且這樣就毋須裝上「cURL」or「Zend Framework」等套件了~ 小巧又好用~ ^^

這裡就拿「Wikipedia - Hadoop」的資料來測試~ 其實程式碼相當精簡~

<?
require_once "HttpClient.php";

$body = HttpClient::quickGet('http://en.wikipedia.org/w/index.php?title=Hadoop&action=edit');
$regex = '/cols=\'80\' >(.*)<\/textarea>/Us';
preg_match($regex,$body,$match);
echo $match[1];
?>

2008-04-24 00:43:49 | Add Comment

B兔G - 來勢洶洶!!

今天接近中午時分時~ 突然組員的一個「登登登」~ 訊息寫著「入選了」三個字~ 呵~

沒錯~ 我們報名的中華電信加值大賽已成功入圍複賽了(初賽入選隊伍名單)~

今年總共有500多隊報名參加~ 而我們這一組入圍複賽的共有「54」隊~ 也就是說我們要和另外「53」個隊伍一起搶錢、搶糧、搶... 哈哈~ 投名狀突然現身了~ 當然是搶冠軍~ 嘿嘿~ 今天是個美好的一天~ 值得慶幸!!

接下來就由我負責統籌整個規劃、分工、技術、溝通~ 各位組員們~ 來吧~ 我們一起去搶錢、搶糧、搶... 冠軍 哈哈~ 又來了 ^^

2008-04-22 19:53:50 | Comments (4)

安裝MediaWiki-1.12.0

由於未來的工作之一就是要「Trace MediaWiki」整個原始碼及架構,所以在這之前當然要先架個Wiki來測試~

整個安裝過程其實相當容易~ 只要你的LAMP環境設置正確~ 我想幾乎都能無痛上手~ 安裝步驟可參考「mawa/kaurjmeb/KJ'sWikiLife/wiki/安裝MediaWiki」,而環境設置可參考筆者的另一篇文章「Installing MySQL & Apache2 & PHP & PDO on Debian 4.0」,不過請切記「不要安裝PDO」~ 而請改安裝「php5-mysql」,如下述指令:

apt-get install php5-mysql

如果你已經安裝了「PDO」的話~ 那請修改一下「/ect/php5/apache2/conf.d」底下的兩個檔案,它們分別為「pdo.ini」和「pdo_mysql.ini」,將裡面的內容加上「#」先註解起來~ 否則你的Apache在啟動時會出現PDO的錯誤訊息~

其實這應該算是MediaWiki採用以往舊式的資料庫函式寫法的關係~ 如果要驗證的話~ 可以看「mediawiki-1.12.0\includes\Database.php」這個原始檔內部的程式~ 你將會看到「mysql_connect」、「mysql_select_db」等函式的出現,所以筆者強烈建議大家如果要開發PHP、Database相關的應用程式,請務必採用「PDO」來實作~ 如果你了解OOP Polymorphism 概念的話~ 或是寫過Java JDBC的話~ 就會了解為何我如此強烈建議~ 所以我現在不得已必須走回頭路... 還好值得安慰的是~ MediaWiki的開發人員當然也有考量到這一點~ 並自行發展出一套介面~ 只是我必須去熟悉它們所開發的這套介面~ 所以這時候就又顯示出PDO的重要了~ 總之~ 有的瞧了~

相關文章

PHP Data Objects (PDO) 介紹

2008-04-22 00:43:37 | Add Comment

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment