目次
Zephir.phpページにアクセスして仕上げます。次の出力に似ているはずです:
保護されたコード
Zephirとは何ですか?なぜPHP拡張開発で使用されているのですか?
ホームページ バックエンド開発 PHPチュートリアル Zephir経由のPHP拡張開発の開始

Zephir経由のPHP拡張開発の開始

Feb 21, 2025 am 11:21 AM

Zephir経由のPHP拡張開発の開始

このチュートリアルでは、CおよびFortranに似た新しい言語:Zephirを使用してPHP拡張機能を作成する方法を説明します。 GitHubから完全なソースコードをダウンロードできます。以前にZephirの概念に触れたことがあるので、幅広い概要を取得することに興味がある場合は、以前の記事をご覧ください。

Zephirは、PHPのように見えるがネイティブCにコンパイルされるコードを作成できるハイブリッド言語と見なすことができます。つまり、拡張機能を作成して非常に効率的なコードを使用できます。

キーテイクアウト

Zephirでは、PHP開発者がPHPと同様の構文を使用して効率的な拡張機能を作成できますが、パフォーマンスを向上させるためにネイティブCにコンパイルされます。
    Zephir開発環境をセットアップするには、Linuxベースのシステムの推奨を備えたGCC、GNU Make、PHP Development Headers、RE2C、JSON-Cなどの特定のツールが必要です。
  • ZephirでPHP拡張機能を作成するプロセスには、プロジェクトの初期化、.Zepファイルのコードの書き込み、コードのコンパイル、および新しい拡張機能を含むようにPHP環境の構成が含まれます。
  • Zephirはパフォーマンスを高めるだけでなく、ソースコードを保護する方法も提供し、閉じたソースPHPアプリケーションの作成に適しています。
  • インストール
  • PHP拡張機能を構築してゼフィルを使用するには、次のことが必要になります。
  • gcc> = 4.x/clang> = 3.x/vc 9

gnuは3.81以降を作成します

PHP開発ヘッダーとツール

re2c 0.13以降
  • json-c
  • インストール手順はすべてのプラットフォームで異なるため、トピックがこれほど高度な記事を持つ記事を読んでいる場合、それらを取得する方法を知っていると思います。記録については、Zephirアプリを開発するためにLinuxベースのシステムを使用することをお勧めします。
  • すべての前提条件ソフトウェアを取得したら、GithubからZephirの最新バージョンをダウンロードしてから、Zephirインストーラーを実行してください。
  • 自動的にインストールする必要があります - Zephirヘルプを入力してみてください。動作していない場合は、「bin」ディレクトリをパス環境変数に追加します。私の場合:/home/duythien/app/zephir/bin、so:
  • 次のエクスポートコマンドを追加します

新しいパスの設定を確認してインストールをテストするには、次のように入力します。

Zephirの基本と構文について、そしてそのタイピングシステムについて知ることができ、そのウェブサイトでいくつかのデモスクリプトを見ることができます。 Zephirを使用したプログラミング

<span>git clone https://github.com/phalcon/zephir
</span><span>cd zephir && ./install -c</span>
ログイン後にコピー
ログイン後にコピー

ここで、Zephirを使用して、CとFortranが非常にうまく処理する数学的方程式を作り直します。この例はむしろ難解であり、ゼフィルの力を示すことを除いて、あまり詳細に説明されません。

時間依存のシュロディンガー方程式は、有限差で解かれました
vi $HOME/.bash_profile
ログイン後にコピー
ログイン後にコピー

時間依存のシュレディンガー方程式は、暗黙的(大きなマトリックス)と明示的な(跳躍)方法の両方で解決できます。明示的な方法を使用します。

まず、次のコマンドを発行して、拡張機能のスケルトンを作成します。

このコマンドが完了すると、「MyApp」と呼ばれるディレクトリが現在の作業ディレクトリに作成されます。これは次のように見えます:
<span>git clone https://github.com/phalcon/zephir
</span><span>cd zephir && ./install -c</span>
ログイン後にコピー
ログイン後にコピー

「MyApp」フォルダー内で、「Quantum.Zep」と呼ばれるファイルを作成します(MyAppQuantumネームスペースが表示されます)。コピーして、次のコードを内部に貼り付けます:
vi $HOME/.bash_profile
ログイン後にコピー
ログイン後にコピー

Fopen()、Sin()、fprintf()などの多くのPHP関数を使用しています。構文を自由に研究してください。また、もう1つの例を挙げます。 Phalcon PHPフレームワークを操作する過程で、ベトナムまたはドイツ語で作業している場合、機能Phalcontag :: FriendlyTitle()は無効です。この例は、上記の方程式よりもはるかに単純で、ファイルnormalizechars.zepを作成します。次のコードをファイルに挿入します:
export PATH=$PATH:/home/duythien/app/zephir/bin
ログイン後にコピー

今、私たちのプロジェクトをコンパイルし、拡張機能を生成する必要があることをゼフィルに伝える必要があります。
echo $PATH
zephir help
ログイン後にコピー

初めて実行されたときに、このクラスをPHP拡張機能にエクスポートするために必要なコードと構成を生成する多くの内部コマンドが実行されます。すべてがうまくいけば、出力の終わりに次のメッセージが表示されます:

zephir init myapp
ログイン後にコピー

コンパイル…

インストール…
拡張機能がインストールされました!

拡張機能= myApp.soをphp.ini
に追加します Webサーバーを再起動することを忘れないでください


ゼフィルは初期段階であるため、バグや問題に遭遇する可能性があることに注意してください。これをコンパイルしようとしたとき、うまくいきませんでした。次のコマンドを試してみましたが、最終的には機能しました。

最後のコマンドは、PHP拡張機能フォルダーにモジュールをインストールします(私の場合:/usr/lib/php5/20121212/)。最後のステップは、次の行を追加して、この拡張機能をphp.iniに追加することです。

apacheを再起動し、完了です。
myapp/
 |-----ext/
 |-----myapp/
 |-----config.json
ログイン後にコピー

コードをテストします

namespace Myapp;
class Quantum{

    const PI = 3.14159265358979323846;
    const MAX = 751;

    public function Harmos(double x){
        int  i,j,n;
        var  psr, psi, p2, v,paramater,fp;
        double dt,dx,k0,item_psr,item_psi;

        let dx = 0.02,
            k0 = 3.0*Myapp\Quantum::PI,
            dt = dx*dx/4.0;
        let paramater =[dx,k0,dt,x];
        let i   = 0,
            psr = [],
            psi = [],
            p2  = [],
            v   = [],
            fp  = [];           

        let fp = fopen ("harmos.txt", "w");
            if (!fp) {
            return false;
            }
        while i <= Myapp\Quantum::MAX{
            let item_psi = sin(k0*x) / exp(x*x*2.0),
                item_psr = cos(k0*x) / exp(x*x*2.0);
            let psr[i] = [item_psr],
                psi[i] = [item_psi],
                v[i] = [5.0*x*x],   
                x = x + dx,
                i++;
        }
        var tmp; 
        let i =1, j=1,tmp=[2.0];
        for n in range(0, 20000){

            for i in range(1,Myapp\Quantum::MAX - 1 ){
                let psr[i][3] =psr[i][0] - paramater[2]*(psi[i+1][0] + psi[i - 1][0]
                            - tmp[0]*psi[i][0]) / (paramater[0]*paramater[0]) + paramater[2]*v[i][0]*psi[i][0],

                p2[i] = psr[i][0]*psr[i][4] + psi[i][0]*psi[i][0];
            }
            for j in range(1,Myapp\Quantum::MAX - 1 ) {
                let psr[0][5] = 0,
                    psr[Myapp\Quantum::MAX][6]= 0 ;
                let psi[j][7] = psi[j][0] + paramater[2]*(psr[j+1][8] + psr[j - 1][9]
                             - tmp[0]*psr[j][10]) / (paramater[0]*paramater[0]) - paramater[2]*v[j][0]*psr[j][11];
            }
        //output split
        if (n ==0 || n % 2000 == 0) {
            let i =1;
            while i < Myapp\Quantum::MAX - 1 {
            fprintf(fp, "%16.8lf %16.8lf %16.8lf \n",i*dx,n*dt,p2[i]);
                let i = i + 10;
            }
            fprintf(fp, "\n");
        }
        // change new->old
        let j = 1;
        while j <  Myapp\Quantum::MAX - 1 {
                let psi[j][0] = psi[j][12],
                    psr[j][0] = psr[j][13];
                let j++;
        }

    }
    return true;    

    }
}
ログイン後にコピー
さて、Zephir.php:

という新しいファイルを作成します

Zephir.phpページにアクセスして仕上げます。次の出力に似ているはずです:

namespace Myapp;

class NormalizeChars{
    public function trans(var s)
    {
            var replace;
        let replace = [
            "ế" : "e",
            "ề" : "e",
            "ể" : "e",
            "ễ" : "e",
            "ệ" : "e",
            //--------------------------------E^
            "Ế" : "e",
            "Ề" : "e",
            "Ể" : "e",
            "Ễ" : "e",
            "Ệ" : "e",
            //--------------------------------e
            "é" : "e",
            "è" : "e",
            "ẻ" : "e",
            "ẽ" : "e",
            "ẹ" : "e",
            "ê" : "e",
            //--------------------------------E
            "É" : "e",
            "È" : "e",
            "Ẻ" : "e",
            "Ẽ" : "e",
            "Ẹ" : "e",
            "Ê" : "e",
            //--------------------------------i
            "í" : "i",
            "ì" : "i",
            "ỉ"  : "i",
            "ĩ" : "i",
            "ị" : "i",
            //--------------------------------I
            "Í" : "i",
            "Ì" : "i",
            "Ỉ"  : "i",
            "Ĩ" : "i",
            "Ị" : "i",
            //--------------------------------o^
            "ố" : "o",
            "ồ" : "o",
            "ổ" : "o",
            "ỗ" : "o",
            "ộ" : "o",
            //--------------------------------O^
            "Ố"  : "o",
            "Ồ" : "o",
            "Ổ"  : "o",
            "Ô" : "o",
            "Ộ"  : "o",
            //--------------------------------o*
            "ớ"  : "o",
            "ờ" : "o",
            "ở"  : "o",
            "ỡ" : "o",
            "ợ"  : "o",
            //--------------------------------O*
            "Ớ"  : "o",
            "Ờ" : "o",
            "Ở"  : "o",
            "Ỡ" : "o",
            "Ợ"  : "o",
            //--------------------------------u*
            "ứ"  : "u",
            "ừ" : "u",
            "ử"  : "u",
            "ữ" : "u",
            "ự"  : "u",
            //--------------------------------U*
            "Ứ"  : "u",
            "Ừ" : "u",
            "Ử"  : "u",
            "Ữ" : "u",
            "Ự"  : "u",
            //--------------------------------y
            "ý"  : "y",
            "ỳ" : "y",
            "ỷ"  : "y",
            "ỹ" : "y",
            "ỵ"  : "y",
            //--------------------------------Y
            "Ý"  : "y",
            "Ỳ" : "y",
            "Ỷ"  : "y",
            "Ỹ" : "y",
            "Ỵ"  : "y",
            //--------------------------------DD
            "Đ"  : "d",
            "đ" : "d",
            //--------------------------------o
            "ó"  : "o",
            "ò" : "o",
            "ỏ"  : "o",
            "õ" : "o",
            "ọ"  : "o",
            "ô" : "o",
            "ơ"  : "o",
            //--------------------------------O
            "Ó"  : "o",
            "Ò" : "o",
            "Ỏ"  : "o",
            "Õ" : "o",
            "Ọ"  : "o",
            "Ô" : "o",
            "Ơ"  : "o",
            //--------------------------------u
            "ú"  : "u",
            "ù" : "u",
            "ủ"  : "u",
            "ũ" : "u",
            "ụ"  : "u",
            "ư" : "u",
            //--------------------------------U
            "Ú"  : "u",
            "Ù" : "u",
            "Ủ"  : "u",
            "Ũ" : "u",
            "Ụ"  : "u",
            "Ư" : "u",

            //--------------------------------a^
            "ấ"  : "a",
            "ầ" : "a",
            "ẩ"  : "a",
            "ẫ" : "a",
            "ậ"  : "a",
            //--------------------------------A^
            "Ấ"  : "a",
            "Ầ" : "a",
            "Ẩ"  : "a",
            "Ẫ" : "a",
            "Ậ"  : "a",
            //--------------------------------a(
            "ắ"  : "a",
            "ằ" : "a",
            "ẳ"  : "a",
            "ẵ" : "a",
            "ặ"  : "a",
            //--------------------------------A(
            "Ắ"  : "a",
            "Ằ" : "a",
            "Ẳ"  : "a",
            "Ẵ" : "a",
            "Ặ"  : "a",
            //--------------------------------A
            "Á"  : "a",
            "À" : "a",
            "Ả"  : "a",
            "Ã" : "a",
            "Ạ"  : "a",
            "Â" : "a",
            "Ă"  : "a",
            //--------------------------------a
            "ả"  : "a",
            "ã" : "a",
            "ạ"  : "a",
            "â" : "a",
            "ă"  : "a",
            "à" : "a",
            "á"  : "a"];
        return strtr(s, replace);

    }
}
ログイン後にコピー

数学的に傾斜している場合は、gnuplotをインストールし、Zephir拡張から得た.txt出力で実行します:

このコマンドは、データファイルのharmos.txtを使用して画像を描画します。 Zephir経由のPHP拡張開発の開始

保護されたコード

場合によっては、コンピレーションはパフォーマンスを大幅に改善しません。これは、計算またはメモリの制限により、アプリケーションのI/Oバウンドにあるボトルネックのためではなく(非常に可能性が高い)ためです。ただし、コンパイルコードは、アプリケーションにある程度の知的保護をもたらす可能性もあります。 Zephirでネイティブバイナリを作成する場合、ユーザーまたは顧客からコードを隠すこともできます。Zephirでは、閉じたソースPHPアプリケーションを作成できます。

結論

この記事は、Zephirで拡張機能を作成する方法に関する基本的なガイドを示しました。 ZephirはPHPまたはCを置き換えるために作成されたのではなく、それらを補完するために作成され、開発者がコードコンピレーションと静的タイピングに挑戦できるようにしました。ゼフィルは、CとPHPの世界から最高のものに参加し、アプリケーションをより速く実行する試みであり、そのため、HHVMとハックとむしろ直接競合します。

Zephirの詳細については、オンラインドキュメントをご覧ください。この記事を楽しんでいましたか?コメントでお知らせください!

Zephir

経由のPHP拡張開発に関するよくある質問

Zephirとは何ですか?なぜPHP拡張開発で使用されているのですか?

Zephirは、PHP拡張機能を簡単かつ効率的に作成するために設計された高レベルのオープンソースプログラミング言語です。 PHP拡張開発で使用されているため、PHPと同様の構文を提供し、PHP開発者がCの複雑さを学習せずに拡張を作成しやすくなり、PHP拡張に通常使用されます。 Zephirはまた、メモリの安全性とパフォーマンスの最適化を提供し、結果として生じる拡張機能をより信頼性と速くします。あなたのローカルマシン。クローニング後、クローン化されたディレクトリに移動し、インストールコマンドを実行します。 Zephirには、PHP開発ヘッダーやCコンパイラなどの特定の依存関係が必要であることに注意することが重要です。インストールプロセスを開始する前に、これらがインストールされていることを確認してください。PHP拡張開発にZephirを介してZephirを使用することの利点は何ですか?

Cは強力な言語ですが、特にそれをよく知らない開発者にとっては複雑で使用が困難です。一方、Zephirは、PHP開発者にシンプルで馴染みのある構文を提供します。また、メモリ管理を自動的に処理し、メモリリークのリスクを軽減します。さらに、Zephirには、結果の拡張機能をより速く実行できるようにするパフォーマンスの最適化が含まれています。

以上がZephir経由のPHP拡張開発の開始の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) PHPでのSQL注入をどのように防止しますか? (準備された声明、PDO) Apr 15, 2025 am 12:15 AM

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPおよびPython:コードの例と比較 PHPおよびPython:コードの例と比較 Apr 15, 2025 am 12:07 AM

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHP:データベースとサーバー側のロジックの処理 PHP:データベースとサーバー側のロジックの処理 Apr 15, 2025 am 12:15 AM

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPの目的:動的なWebサイトの構築 PHPの目的:動的なWebサイトの構築 Apr 15, 2025 am 12:18 AM

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

See all articles