検索

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 old
        let j = 1;
        while j さて、Zephir.php:<p>という新しいファイルを作成します
</p>
<h4 id="Zephir-phpページにアクセスして仕上げます-次の出力に似ているはずです">Zephir.phpページにアクセスして仕上げます。次の出力に似ているはずです:</h4>
<p> </p><pre class="brush:php;toolbar:false">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 までご連絡ください。
どのデータをPHPセッションに保存できますか?どのデータをPHPセッションに保存できますか?May 02, 2025 am 12:17 AM

phpssionscanStorestrings、numbers、arrays、andobjects.1.strings:textdatalikeusernames.2.numbers:integersorfloatsforcounters.3.arrays:listslikeshoppingcarts.4.objects:complextructuresthataresialized。

どのようにPHPセッションを開始しますか?どのようにPHPセッションを開始しますか?May 02, 2025 am 12:16 AM

tostartaphpsession、outsession_start()atthescript'sbeginning.1)placeitbe foreanyouttosetthesscookie.2)usesionsionsionsionserdatalikelogintatussorshoppingcarts.3)再生セッションインドストップレベントフィックスアタック

セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?セッションの再生とは何ですか?また、セキュリティをどのように改善しますか?May 02, 2025 am 12:15 AM

セッション再生とは、新しいセッションIDを生成し、セッション固定攻撃の場合にユーザーが機密操作を実行するときに古いIDを無効にすることを指します。実装の手順には次のものが含まれます。1。感度操作を検出、2。新しいセッションIDを生成する、3。古いセッションIDを破壊し、4。ユーザー側のセッション情報を更新します。

PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?PHPセッションを使用する際のパフォーマンスの考慮事項は何ですか?May 02, 2025 am 12:11 AM

PHPセッションは、アプリケーションのパフォーマンスに大きな影響を与えます。最適化方法には以下が含まれます。1。データベースを使用してセッションデータを保存して応答速度を向上させます。 2。セッションデータの使用を削減し、必要な情報のみを保存します。 3.非ブロッキングセッションプロセッサを使用して、同時実行機能を改善します。 4.セッションの有効期限を調整して、ユーザーエクスペリエンスとサーバーの負担のバランスを取ります。 5.永続的なセッションを使用して、データの読み取り時間と書き込み時間を減らします。

PHPセッションはCookieとどのように異なりますか?PHPセッションはCookieとどのように異なりますか?May 02, 2025 am 12:03 AM

phpsesionsareserver-side、whilecookiesareclient-side.1)Sessionsionsionsoredataontheserver、aremoresecure.2)cookiesstoredataontheclient、cookiestoresecure、andlimitedinsizeisize.sesionsionsionivationivationivationivationivationivationivationivate

PHPはユーザーのセッションをどのように識別しますか?PHPはユーザーのセッションをどのように識別しますか?May 01, 2025 am 12:23 AM

phpidentifiesauser'ssessionsingsinssessionCookiesIds.1)whensession_start()iscalled、phpgeneratesauniquesidstoredsored incoookienadphpsessidontheuser'sbrowser.2)thisidallowsphptortorieSessiondatadata fromthata

PHPセッションを保護するためのベストプラクティスは何ですか?PHPセッションを保護するためのベストプラクティスは何ですか?May 01, 2025 am 12:22 AM

PHPセッションのセキュリティは、次の測定を通じて達成できます。1。session_regenerate_id()を使用して、ユーザーがログインまたは重要な操作である場合にセッションIDを再生します。 2. HTTPSプロトコルを介して送信セッションIDを暗号化します。 3。Session_Save_Path()を使用して、セッションデータを保存し、権限を正しく設定するためのSecure Directoryを指定します。

PHPセッションファイルはデフォルトで保存されていますか?PHPセッションファイルはデフォルトで保存されていますか?May 01, 2025 am 12:15 AM

phpsessionFilesToredInthededirectoryspecifiedBysession.save_path、通常/tmponunix-likesystemsorc:\ windows \ temponwindows.tocustomizethis:1)uesession_save_path()tosetaCustomdirectory、ensuringit'swritadistradistradistradistradistra

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

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

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール