Tự build extension cho php
Tự build extension cho php
Mình viết tut này trên ubuntu , các distro khác có thể sẽ khác .
1.check out php5 source :
Mình sec check out từ svn vào thư mục /var/lib/php5 nhé .
sudo svn checkout http://svn.php.net/viewvc/php/php-src/trunk
Nếu ngại sudo nhiều thì có thể dùng sudo su để thành root luôn cho tiện .
2. Cài php5-dev
sudo apt-get install php5-dev
3. Trong thư mục checkout về , trong thư mục ext sẽ có một file ext_skel.sh file này để sinh ra template cho một ext .
Trong ví dụ nay mình đang xây dựng thư viện simhash (http://knol.google.com/k/simple-simhashing#) .
Thư viện này để so sánh văn bản , hiện đã có implement bằng C .
chạy sudo ./ext_skel –extname=simhash
để tạo thư mục và template cho extension mới .
cd simhash ( để vào thư mục simhash )
4. chạy sudo phpize để sinh ra các file giúp chung ta có thể build extension độc lập , mà không cần build toàn bộ php5 .
5. Viết code:
Có 2 file cần quan tâm là :
php_simhash :
Bạn phải thêm tên các hàm muốn xây dựng trong extension này :
PHP_MINIT_FUNCTION(simhash);
PHP_MSHUTDOWN_FUNCTION(simhash);
PHP_RINIT_FUNCTION(simhash);
PHP_RSHUTDOWN_FUNCTION(simhash);
PHP_MINFO_FUNCTION(simhash);
PHP_FUNCTION(simhash);
PHP_FUNCTION(confirm_simhash_compiled);
Hàm bôi đậm là mình thêm vào nhé .
File Simhash.c
Khai báo các hàm
const zend_function_entry simhash_functions[] = {
PHP_FE(confirm_simhash_compiled, NULL) /* For testing, remove later. */
PHP_FE(simhash, NULL)
{NULL, NULL, NULL} /* Must be the last line in simhash_functions[] */
};
implement hàm :
tạm thời cứ print ra Hello, world nhé .
PHP_FUNCTION(simhash)
{
php_printf(“Hello, world!\n”);
}
6. sudo ./configure
7. sudo make
8. ls modules/
kiểm tra xem có file simhash.so chưa .
Nếu có là ok .
Bạn deploy file simhash.so này bằng cách cấu hình lại php.ini rồi kiểm tra lại bằng phpinfo hoặc tự viết script nhé .
Thật ra trong cái ext của mình cũng có sẵn script test rồi (file simhash.php đấy).
Ngoài ra vấn đề parse các param truyền vào từ php và cách để return giá trị lại cho php caller cũng khá phức tạp .
Để parse param các bạn phải dùng hàm
zend_parse_parameters :
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld|b", &a, &b, &return_long) == FAILURE) {
RETURN_NULL();
}
hàm này hoạt động khá giống scanf chỉ khác formate string "ld|b = long - double - và
zend_bool .
Cách return về dữ liệu cũng phải thực hiện qua các macro :
Kiều thế này .
RETURN_LONG(a + b);
(i-php.net)
Các tin khác cùng chuyên mục
- Kỹ thuật lập trình HTML/CSS mới nhất 2020 - 04
- Funny web2.0
- Giải thử vài câu đề thi tốt nghiệp ptth môn toán
- MỘT NGÀY PHẢI KHÁC MỌI NGÀY
- Level 1 - Lập trình hướng đối tượng (P2)
- Level 1 - Lập trình hướng đối tượng (P1)
- PHP 5.3, Phần 3: Không gian tên
- PHP 5.3, Phần 2: Bao đóng và các hàm lambda
- PHP 5.3, Phần 1: Các thay đổi về giao diện đối tượng
- Tăng tốc độ xử lý CSDL MySQL
Liên kết
Tin được quan tâm nhất
- Ant Group của Jack Ma hé lộ bước đi đầu tiên...
- Ô tô giao hàng tự lái sẽ bắt đầu hoạt...
- Clip cô giáo phạt học sinh tự ném vỡ...
- Tiền điện tử lớn thứ ba thế giới Ripple...
- Joe Biden kêu gọi hiện đại hóa hệ thống...
- Viettel khai trương nền tảng Hồ sơ sức khỏe...
- Các hãng di động nên ngừng cãi nhau về việc...
- Công nghệ AI của Alibaba và Tân Hoa Xã: Đối...
- Một năm đáng thất vọng của YouTube trên toàn...
- EVN lần đầu diễn tập an toàn thông tin mạng...
- Đây là chiếc iPhone được mua nhiều nhất...
- Bộ Tài chính ra quy chế mới về quản lý, sử...
- Cập nhật nhãn mới giúp người tiêu dùng...
- Kiếm tiền từ 5G: Thách thức lớn nhất của...
- "Hô biến" iPhone thành cục đá: Có thể bị...
- Phí trước bạ ô tô không gia hạn giảm, sẽ...
- Tại sao Apple chế tạo ô tô?
- Viettel cung cấp dịch vụ 5G tại thành phố...
- Đội KingTigerPrawn của Hàn Quốc giành giải...
- Thứ trưởng Phan Tâm: “Triển khai hạ tầng 5G...
- Nhiều mẫu iPhone chính hãng đang khan hàng tại...
- Mỹ quy định drone cần có ID, trang bị đèn ban...
- Trung Quốc điều tra Alibaba: Bài học cho Jack Ma...
- Chuyên gia dự báo 5 xu hướng tấn công mạng...
- Apple MagSafe vẫn còn rất nửa vời
- Các tỉnh cuối cùng đã ngừng phát sóng...
- 55/63 tỉnh thành sử dụng Zalo trong cải cách...
- Headline: CR7: “Mong muốn của tôi là luôn...
- Samsung dự kiến xuất xưởng dưới 300 triệu...
- Vì sao Trung Quốc ‘sờ gáy’ Alibaba?
- Những smartphone được người Việt mua nhiều...
- Vì sao mua hàng ở sàn TMĐT Mỹ không cần...
- Đằng sau bức ảnh động viên Đà Nẵng chiến...
- VNPT cung cấp MyTV Box 2020 - Tính năng nâng cấp...
- Clip hành động ghê tởm của shipper trước khi...
- Các đội thi chung kết WhiteHat Grand Prix 6 phát...