ホームページ  >  記事  >  バックエンド開発  >  PHP 拡張機能の開発: 最初の拡張機能 hello world の作成

PHP 拡張機能の開発: 最初の拡張機能 hello world の作成

不言
不言オリジナル
2018-04-13 16:16:243331ブラウズ

この記事の内容は、PHP 拡張機能開発における最初の拡張機能 hello world の作成を共有することです。必要な友人はそれを参照できます。

PHP 拡張機能は、上級 PHP プログラマーが必要とするスキルの 1 つです。初心者の PHP 拡張機能開発者は、どのようにして成熟した拡張機能を開発し、PHP 開発の高度な分野に参入できるのかを理解する必要があります。この一連の開発チュートリアルでは、入門段階から上級段階まで段階的に説明します。
このチュートリアル シリーズは Linux (centos を推奨) で開発されており、PHP バージョンは 5.6 であり、Linux、git 操作、および C/C++ 基礎に関する一定の経験があることを前提としています。
ご質問があり、連絡する必要がある場合は、QQ 技術交換グループ 32550793 に参加して私と連絡してください。

PHP 拡張機能の開発には使いやすい PHP-CPP フレームワークを使用しています。ある程度の Linux 操作経験と C++ の基礎がある場合は、以下の手順に従って最初の拡張機能を 10 分以内に作成できると思います。出てくる。
以下のデモ動作はすべて Linux CentOS システム上で完了しており、php5.6 シリーズが事前にインストールされています。

1. PHP-CPP をダウンロードしてインストールします

PHP-CPP を使用して独自の php 拡張機能をコンパイルする場合は、まず PHP-CPP のソース コードをダウンロードし、コンパイルしてインストールする必要があります。
PHP-CPP には、PHP-CPP (新バージョン) と PHP-CPP-LEGACY という 2 つのフレームワーク ソース コードがあります。
PHP-CPP (新バージョン) は PHP-7 拡張機能の開発に適しており、PHP-CPP-LEGACY はバージョン 5. の拡張機能の開発に適しています。
以下の私たちのオペレーションは、PHP-CPP-LEGACY を例として取り上げています。

git コマンドを知っている場合は、ターミナルのコマンド ラインに次の git コマンドを直接入力できます。

# git clone https://github.com/CopernicaMarketingSoftware/PHP-CPP-LEGACY.git

git を知らなくても問題ありません。ソースコードの Github ウェアハウス URL をブラウザで直接開き、ソースコードの圧縮パッケージをダウンロードして解凍します。ウェアハウス URL は
https:/ です。 /github.com/CopernicaM....

ダウンロードが完了したら、PHP-CPP-LEGACY のソース コード ディレクトリに移動し、make コマンドを入力してソース コードをコンパイルします。コンパイルが完了すると、拡張機能の開発に必要な関連クラス ライブラリが生成されます。

# make

次に、make install コマンドを実行して、生成されたクラス ライブラリと関連する開発ヘッダー ファイルを Linux システムにインストールします。拡張機能がコンパイルされると、ヘッダー ファイルやクラス ライブラリのディレクトリを設定せずに自動的に接続されます。

# sudo make install

2. 最初の拡張機能 helloworld をダウンロードします

最初の拡張機能 helloworld のソース コードは、git コマンドで直接クローンするか、手動でダウンロードできます。

# git clone https://github.com/elvisszhang/phpcpp_helloworld.git

helloworld ソース コード ディレクトリに入り、main.cpp を開くと、次のコード構造が表示されます。すべてに中国語のコメントが追加されています。
最も重要なものは、拡張機能のエントリ関数である get_module 関数です。

#include <phpcpp.h>
#include <iostream>

//这是PHP里面可以调用的接口函数
void say_hello()
{
    //输出一段欢迎
    Php::out << "hello world from my first extension" << std::endl;
}

/**
 *  告诉编译器get_module是个纯C函数
 */
extern "C" {
    
    /**
     *  本函数在PHP进程一打开就会被访问,并返回一个描述扩展信息的PHP结构指针
     */
    PHPCPP_EXPORT void *get_module() 
    {
        // 必须是static类型,因为扩展对象需要在PHP进程内常驻内存
        static Php::Extension extension("helloworld", "1.0.0");
        
        //这里可以添加你要暴露给PHP调用的函数
        extension.add<say_hello>("say_hello");
        
        // 返回扩展对象指针
        return extension;
    }
}

test.php は、拡張テストに使用される php コードの一部です。

<?php
say_hello();

3. 最初の拡張機能 helloworld をコンパイルします

この拡張機能のコンパイルは非常に簡単で、ターミナルのコマンド ラインで make コマンドを入力するだけです。

# make
g++ -Wall -c -O2 -std=c++11 -fpic -o main.o main.cpp
g++ -shared -o helloworld.so main.o -lphpcpp

予想どおり、ソース ディレクトリに helloworld.so 拡張子ファイルが表示されます。このファイルは非常に小さく、わずか 14K であることがわかります。
しかし、ここで php -m コマンドを入力すると、PHP オペレーティング環境に helloworld 拡張機能がインストールされていないため、PHP モジュールに helloworld 拡張機能が含まれていないことがわかります。

4.最初の拡張機能helloworldをインストールします

ここでは拡張機能を手動でインストールする方法を一時的に紹介します。

  • ステップ 1: まず、php-config コマンドを使用して、拡張機能が保存されている場所を確認します

# php-config --extension-dir
/usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226

上記は、サーバー上の拡張機能がインストールされている場所を示しています。

  • ステップ 2: 次に、helloworld.so を拡張機能の保存ディレクトリにコピーします。

# cp helloworld.so /usr/local/php56/lib/php/extensions/no-debug-non-zts-20131226/
  • ステップ 3: php.ini ファイルを変更し、helloworld 拡張機能を有効にする

php.ini ファイルを開き、次の構成項目を追加し、php.ini 内の任意の場所に新しい行を追加します。

extension = helloworld.so
  • ステップ 4: helloworld 拡張機能が正常にインストールされたことを確認します

現在 php にインストールされているすべての拡張機能を表示するには、php -m コマンドを使用します。

# php -m | grep helloworld
helloworld

上記のコマンドラインからの応答から判断すると、helloworld 拡張機能は正常にインストールされています。

  • ステップ 5: test.php を実行して、登録機能が使用できることを確認します

または、拡張機能のソース コード ディレクトリで次のコマンドを実行します

# php test.php
hello world from my first extension

上記のコマンド ラインの応答から、登録しました拡張機能を使用して PHP で Say_hello を実行すると、非常に単純な機能に感じられますか? しかし、現在の拡張機能は hello を言うだけで、本格的なことは何もできません。今後、さらに多くのことを実行できるように改良します。

参考情報

PHP-CPPのインストールとhello world
PHP-CPP公式Webサイトのチュートリアル

関連推奨事項:

PHP拡張機能開発のための関連開発技術の比較と紹介

以上がPHP 拡張機能の開発: 最初の拡張機能 hello world の作成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。