التعريف بيـPHP-CPP

تم تحميل الصفحة في 1,6101725 ثانية
التعريف بيـPHP-CPP
إنضم
20 أبريل 2013
المشاركات
258
الإعجابات
162
النقاط
43
الإقامة
Jordan
مرحبا جميعا

اليوم موضعنا كثير سهل وبسيط
وهدقه فقط التعريف مع شرح مثال بهدف التعريف لا اكثر ولا اقل

الان كتابة الااضافات بلغة الphp ليس سهل
في الكثير من التفاصيل والاكواد الطويلة لاي اضافة
بجانب الAPI الخاص بي php5 و php7

في فرف بينهما نوعا ما

موضعنا اليوم عن
PHP-CPP

مشروع بسيط هدفه تبسيط عمل اضافة للغة PHP
سواء الاضافة للcli او
web

انا بفضل cli

راح نشرح الاضافة في gnu/linux
بالنسبة للويندز والماك ما عندي فكرة لاني لم استعمل الويندز من سنوات طويلة

حسنا مبدا عمل المشروع تكتب برنامج بلغة cpp تصنعه ثم تضيفه
للphp

طبعا اساسيات كتابة اضافة بلغة الphp هوة وجود الدالة
get_module
الان ستعرف لماذا هذا السطر

اولا التنزيل في بيئة الجنو لينكس


كود:
git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP.git
ثم ببساطة ندخل لل
مسار ثم

كود:
make && make install
وهيك بكون المشروع مثبت بنجاح

الان الهدف من هذا الموضوع التعريف لا الشرح

لكن سنشرح مثال بسيط



اولا نعمل ملف بلغة
cpp
ليكن مثلأً first.cpp
وايضا makefile
ببساطة اعمل ملف اسمه
Makefile
وضع هذا الكود داخله



#
# Makefile template
#
# This is an example Makefile that can be used by anyone who is building
# his or her own PHP extensions using the PHP-CPP library.
#
# In the top part of this file we have included variables that can be
# altered to fit your configuration, near the bottom the instructions and
# dependencies for the compiler are defined. The deeper you get into this
# file, the less likely it is that you will have to change anything in it.
#

#
# Name of your extension
#
# This is the name of your extension. Based on this extension name, the
# name of the library file (name.so) and the name of the config file (name.ini)
# are automatically generated
#

NAME = [HERE]


#
# Php.ini directories
#
# In the past, PHP used a single php.ini configuration file. Today, most
# PHP installations use a conf.d directory that holds a set of config files,
# one for each extension. Use this variable to specify this directory.
#

INI_DIR = /etc/php5/conf.d


#
# The extension dirs
#
# This is normally a directory like /usr/lib/php5/20121221 (based on the
# PHP version that you use. We make use of the command line 'php-config'
# instruction to find out what the extension directory is, you can override
# this with a different fixed directory
#

EXTENSION_DIR = $(shell php-config --extension-dir)


#
# The name of the extension and the name of the .ini file
#
# These two variables are based on the name of the extension. We simply add
# a certain extension to them (.so or .ini)
#

EXTENSION = ${NAME}.so
INI = ${NAME}.ini


#
# Compiler
#
# By default, the GNU C++ compiler is used. If you want to use a different
# compiler, you can change that here. You can change this for both the
# compiler (the program that turns the c++ files into object files) and for
# the linker (the program that links all object files into the single .so
# library file. By default, g++ (the GNU C++ compiler) is used for both.
#

COMPILER = g++
LINKER = g++


#
# Compiler and linker flags
#
# This variable holds the flags that are passed to the compiler. By default,
# we include the -O2 flag. This flag tells the compiler to optimize the code,
# but it makes debugging more difficult. So if you're debugging your application,
# you probably want to remove this -O2 flag. At the same time, you can then
# add the -g flag to instruct the compiler to include debug information in
# the library (but this will make the final libphpcpp.so file much bigger, so
# you want to leave that flag out on production servers).
#
# If your extension depends on other libraries (and it does at least depend on
# one: the PHP-CPP library), you should update the LINKER_DEPENDENCIES variable
# with a list of all flags that should be passed to the linker.
#

COMPILER_FLAGS = -Wall -c -O2 -std=c++11 -fpic -o
LINKER_FLAGS = -shared
LINKER_DEPENDENCIES = -lphpcpp


#
# Command to remove files, copy files and create directories.
#
# I've never encountered a *nix environment in which these commands do not work.
# So you can probably leave this as it is
#

RM = rm -f
CP = cp -f
MKDIR = mkdir -p


#
# All source files are simply all *.cpp files found in the current directory
#
# A builtin Makefile macro is used to scan the current directory and find
# all source files. The object files are all compiled versions of the source
# file, with the .cpp extension being replaced by .o.
#

SOURCES = $(wildcard *.cpp)
OBJECTS = $(SOURCES:%.cpp=%.o)


#
# From here the build instructions start
#

all: ${OBJECTS} ${EXTENSION}

${EXTENSION}: ${OBJECTS}
${LINKER} ${LINKER_FLAGS} -o [email protected] ${OBJECTS} ${LINKER_DEPENDENCIES}

${OBJECTS}:
${COMPILER} ${COMPILER_FLAGS} [email protected] ${@:%.o=%.cpp}

install:
${CP} ${EXTENSION} ${EXTENSION_DIR}
${CP} ${INI} ${INI_DIR}

clean:
${RM} ${EXTENSION} ${OBJECTS}




مكان [HERE]
اسم اضافتك


هيك بنكون قطعنا نصف المشوار

مجرد اختبار بسيط اول شيء

#include <phpcpp.h
اعتقد السطر واضح
فقط تضمين ملف المشروع


extern "C" {

هذا الجزء معروف
لا تعرفه من هنا اذا


الان
كود:
PHPCPP_EXPORT void *get_module(){
ملخص سريع
الphp لما بدها تضيف اضافة بدها تبحث عن الدالة
get_module
لهيك هاي الدالة لازم تكون موجودة
PHPCPP_EXPORT
ماكرو مش ضروري نعرف وجوده
اليوم نكتفي بذكره فقط


الان نكتب

كود:
static Php::extension MyFirst("EXTENSION_NAME","VERSION");
هذا السطر تعريف للدالة
اسم الاضافة و الاصدار

ثم ببساطة

كود:
return MyFist
وهيك بنكون انتهينا من اول مثال النا

الكود كامل


C++:
#include <phpcpp.h>

extern "C"{
    PHPCPP_EXPORT *get_module(){
        static Php::Extension MyFist("MyFist","0.1");
        return MyFist;
    }
}
الان
من الكونسل او التيرمنال

make

الجزئ القادم في php-cli
نعمل ملف
php.ini
فيه

كود:
extension=[PATH_OF_SO_LIB]
ثم
كود:
php -c [PHP_INI_PATH] -m
الان راح يعطينا اسماء الاضافات الموجودة

نبحث عن
MyFist
اذا كانت موجودة تم عملنا 100%
والا نراجع الخطوات



وهنا نهاية التعريف وليس الشرح
مرة اخرى الهدف التعريف لا الشرح
اي سؤال الجوحل موجود
واذا ما لقيت اجابة انا بساعدك

شكرًا ودمتم في امان










 
إنضم
20 أبريل 2013
المشاركات
258
الإعجابات
162
النقاط
43
الإقامة
Jordan
ك بنكون قطعنا نصف المشوار

مجرد اختبار بسيط اول شيء
#include <phpcpp.h
اعتقد السطر واضح
فقط تضمين ملف المشروع

extern "C" {

هذا الجزء معروف
لا تعرفه من هنا اذا
نصنع ملف ونضع فيه الكود
الملف first.cpp
نسيت اكتبه
 

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 0 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل