ホームページ バックエンド開発 PHPチュートリアル [php拡張子と埋め込み] - ビルド環境のインストール_PHPチュートリアル

[php拡張子と埋め込み] - ビルド環境のインストール_PHPチュートリアル

Jul 14, 2016 am 10:08 AM
php そして インストール インストール 埋め込み 拡大する 構築する 環境 ふりをする

ビルド環境をインストールします


これで、おそらく少なくとも 1 つの php がインストールされており、それを Web ベースのアプリケーション開発に使用していることになるでしょう。win32 ビルドを php.Net からダウンロードし、iis または Windows 上で実行している可能性があります。 Apache のバージョンを使用するか、*nix (Linux、bsd、またはその他の POSIX 準拠ディストリビューション) ディストリビューションのパッケージ管理システムを使用して、サードパーティが作成したバイナリをインストールします。

Build php

ソース パッケージを自分でダウンロードする場合を除き、コンパイルします。

*nix ツール

C 開発者ツール セットの最初の必須ツールは、C 用のコンパイラです。運が良ければ、ディストリビューションにデフォルトで含まれている可能性があります。それは gcc (GNU コンパイラ) です。 gcc version または cc version を実行すると、コンパイラーがインストールされているかどうかを確認できます。インストールされている場合は、インストールされているコンパイラーのバージョン情報が返されます。 コンパイラーをインストールしていない場合は、gcc をダウンロードしてください。通常、これは、使用しているディストリビューションのバージョンに応じて、.rpm または .deb ファイルをダウンロードして、それをインストールするコマンドを実行することを意味します。次のコマンドを使用してインストールを試みます: urpmi gcc、apt-get install gcc、pkg-add -r gcc、emerge gcc。

コンパイラーに加えて、次のプログラムとツールも必要です: make、autoconf、automake , libtool. これらのツールは、gcc をインストールするときと同じように、使用しているディストリビューションのパッケージ管理システムを使用してインストールすることも、gnu.org からソース コード パッケージを直接ダウンロードして自分でコンパイルすることもできます

推奨バージョン。 libtool 1.4.3、autoconf 2.13、automake 1.4 または 1.5。これらのソフトウェアの新しいバージョンを使用しても問題なく動作する可能性がありますが、これらのバージョンは長期使用によって検証されています。

CVS を使用して最新のバージョンを確認する場合は、言語インタープリターを構築するには、PHP 開発バージョン コード、bison、および flex も必要です。他のパッケージと同様、これら 2 つのパッケージは、配布パッケージ管理システムを使用してインストールすることも、gnu.org からソース コードをダウンロードして自分でコンパイルすることもできます。

CVS を選択した場合は、CVS クライアントもインストールする必要があります。これはディストリビューションに既にインストールされている場合もありますが、他のパッケージとは異なり、このパッケージは cvshome.org からダウンロードする必要があります。

Win32 ツール

翻訳者は Windows 環境に慣れていないため、スキップします

php のソース コードを入手します

php をダウンロードするとき、まず、ディストリビューションがサポートしている場合は、一元的な選択肢があります。 apt-get source php5 のようにこのコマンドを実行してダウンロードします。この方法の利点は、使用しているディストリビューション バージョンには、php ソース コードの変更が必要な問題が発生する可能性があることです。ここからダウンロードすると、次のような問題が発生する可能性があります。問題はパッチされており、ビルドの問題は少なくなります。欠点は、ほとんどのディストリビューションが公式 PHP リリースよりも数週間遅れることです。

別のオプションとして、www.php から php-x.y.z.tar.gz をダウンロードします。 net (x.y.z は現在のリリース バージョンです)。これらの PHP リリースは、世界中の無数の PHP ユーザーによってテストされており、最新です。

このサイトでは、スナップショット パッケージをダウンロードすることもできます。 PHP リポジトリ内のすべてのソース コードの最新バージョンは数日ごとに更新されます。PHP コア開発者による特定のコミットによって一時的に利用できなくなる場合がありますが、正式リリース前に最新の PHP 6.0 機能が必要な場合は、 、これが最も簡単に入手できる場所です

最後に、拡張機能と組み込みプログラムのみを開発している場合、CVS を使用すると、PHP カーネル開発チームが使用する開発バージョンを直接取得できます。ただし、拡張機能や他のアプリケーションを CVS ライブラリにリリースする予定がある場合は、チェックアウト プロセスを理解しておくと便利です。

翻訳注: 現在、PHP はコードの管理に Git を使用しています。 CVS チェックアウトについては詳しく説明しません。php にコードを提供したい場合は、https://github.com/php/php-src にアクセスしてください。

開発用の php の設定

拡張機能を開発するか、PHP の他のアプリケーションを開発するかについては、第 1 章で説明しました。開発者をビルドするときに使用する必要がある 2 つの特別な ./configure スイッチがあります。フレンドリーな PHP。これら 2 つのスイッチは、PHP を構築するときに使用する他のスイッチと組み合わせて使用​​する必要があります。

第 3 章「メモリ管理」を思い出してください。ZendMM は各リクエストの割り当てを暗黙的に解放しますが、新しく開発されたコードで一連の回帰テスト ケースを実行することにより、メモリは解放されません。ポイントは簡単に公開できるため、リリース間でパッチを適用できるようになります。以下のコード スニペットを見てみましょう:

void show_value(int n) 
{ 
    char *message = emalloc(1024); 
   
    sprintf(message, "The value of n is %d\n", n); 
    php_printf("%s", message); 
}
ログイン後にコピー

この愚かなコードが php リクエストの実行中に実行されると、通常は ZendMM の 1024 バイトのメモリがリークされます。スクリプトの実行終了後に解放されます。

有効 - デバッグがオンになっている場合、問題を特定するためのエラー メッセージが開発者に提供されます:

/cvs/php5/ext/sample/sample.c(33) :  Freeing 0x084504B8 (1024 bytes), script=- 
=== Total 1 memory leaks detected ===
ログイン後にコピー

この短いが完全なメッセージは、ZendMM がクリーンアップされたことを示します。メモリを汚し、リークしたメモリ ブロックがどこに割り当てられているか この情報を使用すると、問題の場所を特定し、ファイルを開いて対応する行を見つけ、末尾の前の適切な位置に efree(message) を追加することが簡単になります。関数。

当然, 内存泄露并不是你会碰到的唯一难以追查的问题. 有时候, 问题是潜在的, 很少显现. 比如你通宵达旦的工作, 修改了很多的代码和源文件, 当所有事情做完后, 你自信的执行了make, 测试了一个简单的脚本, 接着就看到了下面的输出:

$ sapi/cli/php -r 'myext_samplefunc();'

Segmentation Fault

这只是表象, 那问题出在哪里呢? 查看你的myext_samplefunc()实现, 并没有显示出什么明显的线索, 使用gdb运行仅显示出一串未知的符号.

同样, enable-debug会帮到你. 通过在./configure时增加这个开关, 结果的php二进制将包含所有gdb以及其他core文件检查程序所需的调试符号, 这样可以显示出问题出在哪里.

使用这个选项重新构建, 通过gdb触发崩溃, 你现在可以看到下面的输出:

1

2

3

#0 0x1234567 php_myext_find_delimiter(str=0x1234567 "foo@#(FHVN)@\x98\xE0...",

strlen=3, tsrm_ls=0x1234567)

p = strchr(str, ',');

目标就变得清晰了. str字符串并不是NULL终止的, 后面的垃圾可以证明这一点, 而非二进制安全的函数使用了它. strchr()实现尝试从头到尾的扫描传入的str, 但由于没有终止NULL字节, 它到达了不属于它的内存, 这就导致了段错误. 我们可以使用memchr()和strlen参数来修复这个问题防止崩溃.

enable-mantainer-zts

这个选项强制php构建启用线程安全资源管理(TSRM)/Zend线程安全(ZTS)层. 这个开关会增加处理时的复杂度, 但是对于开发者而言, 你会发现这是一件好事情. 关于ZTS的详细介绍以及为什么在开发时要开启这个选项, 请参考第一章.

enable-embed

如果你要开发一个嵌入php的其他应用, 就需要另外一个非常重要的开关. 这个开关打开后就会构建出一个类似开启了with-apxs后构建出的mod_php5.so动态链接库: libphp5.so, 它可以用于将php嵌入到其他应用中.

在Unix上编译

现在你已经有了所有需要的工具, 下载了php源码包, 认识了所有需要的./configure开关, 是时候真正的编译php了.

这里假设你下载的是php-5.1.0.tar.gz, 放在了你的主目录, 你将使用下面的命令序列解包源码包, 并切换到解压出的源码目录:

[/home/sarag]$ tar -zxf php-5.1.0.tar.gz 
[/home/sarag]$ cd php-5.1.0
ログイン後にコピー

如果你使用的不是gnu的tar, 命令可能需要略作修改:

[/home/sarag]$ gzip -d php-5.1.0.tar.gz | tar -xf -
ログイン後にコピー

现在, 用所需的开关和其他你想要开启或禁用的选项, 执行./configure命令:

[/home/sarag/php-5.1.0]$ ./configure enable-debug \ 
enable-maintainer-zts disable-cgi enable-cli \ 
disable-pear disable-xml disable-sqlite \ 
without-mysql enable-embed
ログイン後にコピー

在一段时间的处理后, 在你的屏幕上输出了很多的信息, 最终完成了./configure阶段. 接下来你就可以开始编译了:

[/home/sarag]$ make all install
ログイン後にコピー

现在, 站起来喝杯咖啡吧. 编译的时间在性能高的机器上可能需要几分钟, 在旧的486上甚至可能需要半个小时. 构建处理完成后, 你就拥有了一个正确配置, 功能完整, 可用于开发的php.

在Win32上编译

译者不熟悉windows环境, 因此略过.

小结

现在php已经以正确的选项安装了, 你已经准备好开发一个真实的, 有功能的扩展了. 后面的章节, 就开始剖析php扩展. 即便你只计划将php嵌入到你的应用中, 而不对语言做任何扩展, 你也应该阅读这些章节, 因为它详细解释了php的运行机制.

以上就是 [翻译][php扩展开发和嵌入式]第4章-安装构建环境的内容,更多相关内容请关注PHP中文网(www.php.cn)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles