I know you can technically make PHP extension just by making a PHP file and using require_once
.
इस कार्यक्षमता के आधार include
बयान है, जो भी शामिल है और निर्दिष्ट फ़ाइल का मूल्यांकन करता है। एक्सटेंशन सही शब्द नहीं है, क्योंकि आप बस एक और PHP स्क्रिप्ट फ़ाइल शामिल कर रहे हैं। एक PHP एक्सटेंशन संकलित मॉड्यूल के रूप में भाषा के लिए अतिरिक्त कार्य प्रदान करता है।
But would it optimize the performance, if you wrote an extension in C or C++.
हां, यह प्रदर्शन को अनुकूलित करता है। यही कारण है कि CPhalcon या YAF जैसे PHP एक्सटेंशन लिखे गए थे।
How to make a "Hello World" PHP Extension?
मैं वर्णन करूंगा कि आप पांच चरणों में "हैलो वर्ल्ड" PHP एक्सटेंशन कैसे बना सकते हैं।
एक डेबियन आधारित ओएस आवश्यक है, क्योंकि हमें कुछ टूल और निर्भरताओं को उपयुक्त प्राप्त करने की आवश्यकता है।
चरण 1 - सेटअप पर्यावरण/आवश्यकताओं के
एक PHP एक्सटेंशन सी कोड संकलित किया गया है बनाएँ।हमें एक खोल (पहले से स्थापित किया जाना चाहिए), एक संपादक (आपकी पसंद), एक कंपाइलर (यहां हम जीसीसी का उपयोग करेंगे), PHP स्वयं और निर्माण के लिए PHP विकास निर्भरता की आवश्यकता है।
sudo apt-get install build-essential php7.0 php7.0-dev
चरण 2 - Config
हम अपने विस्तार का वर्णन करने की जरूरत है और एक बुनियादी विन्यास फाइल में यह गठन फ़ाइलें:
फ़ाइल: config.m4
PHP_ARG_ENABLE(php_helloworld, Whether to enable the HelloWorldPHP extension, [ --enable-helloworld-php Enable HelloWorldPHP])
if test "$PHP_HELLOWORLD" != "no"; then
PHP_NEW_EXTENSION(php_helloworld, php_helloworld.c, $ext_shared)
fi
आप के रूप में देख सकते हैं, NEW_EXTENSION में एक सी फ़ाइल है: php_helloworld.c
।
चरण 3 - कोड
के हमारे विस्तार के लिए सी कोड बनाते हैं। दूसरी बात यह है
php_helloworld.h
// we define Module constants
#define PHP_HELLOWORLD_EXTNAME "php_helloworld"
#define PHP_HELLOWORLD_VERSION "0.0.1"
// then we declare the function to be exported
PHP_FUNCTION(helloworld_php);
, हम स्रोत फ़ाइल बनाने:
सबसे पहले, हम एक हैडर फ़ाइल बनाने
php_helloworld.c
// include the PHP API itself
#include <php.h>
// then include the header of your extension
#include "php_helloworld.h"
// register our function to the PHP API
// so that PHP knows, which functions are in this module
zend_function_entry helloworld_php_functions[] = {
PHP_FE(helloworld_php, NULL)
{NULL, NULL, NULL}
};
// some pieces of information about our module
zend_module_entry helloworld_php_module_entry = {
STANDARD_MODULE_HEADER,
PHP_HELLOWORLD_EXTNAME,
helloworld_php_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
PHP_HELLOWORLD_VERSION,
STANDARD_MODULE_PROPERTIES
};
// use a macro to output additional C code, to make ext dynamically loadable
ZEND_GET_MODULE(helloworld_php)
// Finally, we implement our "Hello World" function
// this function will be made available to PHP
// and prints to PHP stdout using printf
PHP_FUNCTION(helloworld_php) {
php_printf("Hello World! (from our extension)\n");
}
चरण 4 - बिल्ड
अब, हम एक्सटेंशन बनाने के लिए तैयार हैं।
पहले हम एक PHP विस्तार के लिए निर्माण पर्यावरण को तैयार:
phpize
फिर हम निर्माण कॉन्फ़िगर और हमारे एक्सटेंशन सक्षम:
./configure --enable-php-helloworld
अंत में, हम यह निर्माण कर सकते हैं:
make
sudo make install
चरण 5 - टेस्ट
हमारे PHP एक्सटेंशन के परीक्षण के लिए देता है helloworld_php.so
विस्तार फ़ाइल को लोड और हमारे समारोह helloworld_php()
निष्पादित करें:
php -d extension=php_helloworld.so -r 'helloworld_php();'
हो गया :) विंडोज पर
बिल्डिंग यदि आप विंडोज़ बनाने की कोशिश करते हैं (यिक्स!), तो आप चरणों थोड़ा समायोजित करने की आवश्यकता:
चरण 2 - Config
फ़ाइल: config.w32
ARG_ENABLE("helloworld", "helloworld support", "yes");
if (PHP_HELLOWORLD == "yes") {
EXTENSION("helloworld", "php_helloworld.c");
}
चरण 4 -
उपयोग nmake
बजाय का निर्माण make
का।
उपयोगी साधन की सूची:
में
(dll) file
कर सकते हैं, लेकिन उन उदाहरणों के बारे में क्या है जो सी ++ दिखाते हैं एक्सटेंशन अकेले PHP से दस गुना तेज है? – johnny@ जॉनीनी यह लगभग हर मामले में अप्रासंगिक है। यदि आप प्रदर्शन के बारे में चिंतित हैं, तो * पूरी साइट * सी ++ में लिखें और PHP को पूरी तरह से छोड़ दें। जब तक आप उस प्रदर्शन लाभ के लिए ठोस आवश्यकता का प्रदर्शन नहीं करते हैं, तब तक आपकी कोई भी कार्यक्षमता सी ++ पर पोर्टिंग करने में ** कोई ** मान नहीं है, और जब तक कि आप फेसबुक स्केल पर न हों, आपको इसकी आवश्यकता नहीं है। – meagar
यह एक बुरा जवाब है। फेसबुक ने अपनी स्थापना के बाद से सी कोड पुस्तकालयों और PHP के लिए विस्तार लिखा है। फेसबुक के पैमाने पर स्केल करने का कोई तरीका नहीं होगा अगर यह व्यवसाय तर्क को पूरा करने के लिए सी/सी ++ जैसी तेजी से चल रही संकलित भाषा के लिए नहीं था। – cj5