目次
準備:
コンパイルと生成:
PHP ソース コードのコンパイル:
PHP スケルトンの生成:
CでPHP拡張テストを書く:
ホームページ バックエンド開発 PHPチュートリアル DICOM医用画像処理:WEB PACS 3に関する予備講演、PHP拡張スケルトン

DICOM医用画像処理:WEB PACS 3に関する予備講演、PHP拡張スケルトン

Jun 23, 2016 pm 01:46 PM

背景:

最後の 2 つのコラムのブログ投稿はすべて WEB PACS 環境の構築に関するもので、構築されたプラットフォームのバックエンドが DICOM 関連の操作を実行しない場合、実際には PACS とはまったく関係がありません。少し混乱しているように見える投稿もいくつかありますが、開発環境の構築自体は大規模で困難なプロジェクトなので、一度環境をデバッグしてしまえば、その後の PACS 関連の開発は非常に簡単になります。スタンドアロン版については、今しばらくお待ちいただければ、近いうちにプラットフォームへの導入を開始いたします。

C/C++ で PHP 拡張機能を作成するための環境構築:

最後の 2 つのブログ投稿は、この環境での巧妙な試みにすぎません。最初のブログ投稿では、APACHE サービスに付属する CGI を直接使用して、C でコンパイルされた exe ファイルを直接呼び出します。 CGI によるテクノロジーは徐々に FastCGI に置き換えられているため、最初のブログ投稿はデモンストレーションとしてのみ使用され、その後の実際の開発では使用されません。2 番目のブログ投稿は最初の投稿を継続して画像を送信しようとしましたが、最終的には失敗しました。画像を実装するための C 言語を見つけるには、PHP や Perl などのインタプリタ型言語を使用して遅延的に実装するしかありません。ブログ投稿はあまり効果がありません。上記の理由を考慮して、WEB PACS の最終的な完全な開発環境を実現するために、すでに確立されている FastCGI プラットフォームに基づいて、C/C++ 言語で PHP 拡張機能を記述するためのフレームワークを追加することにしました。

準備:

1) PHP ソース コード: PHP ソース コードをダウンロードする目的は、最新かつ最もネイティブな PHP 実行プログラム、つまり php.exe を生成することです (もちろん、最新の PHP を直接使用することもできます) Baidu/Google からのインストール パッケージ、ダブルクリックしてインストールします);

2) PHP ソース コードのコンパイル: PHP ソース コードはオープン ソースであり、Linux でのコンパイルが必要なため、Windows でミニ Linux コンパイル環境をインストールする必要があります。 Cygwin または msys+MingGWen をダウンロードします (両方の詳細については、このブログ投稿 http://zengrong.net/post/1723.htm の紹介を参照してください);?? $cygwin_path = 'c を変更するのを忘れないでください。 cygwin64bin'; ステートメントを、sh.exe の場所を示すために独自のパスに変更します。

3) PHP SDK: SDK、正式名は Software Development Kit で、名前が示すように、ソフトウェア開発プロセスで一般的に使用される小さなツール (API として理解できます) のコレクションです。ここでは、php-binary-sdk パッケージ内の bison.exe と flex.exe を使用し、それらを現在の Windows ディレクトリにコピーするだけで済みます。目的は、それらを見つけられるようにすることです (2 つのパスを追加することもできます)。環境変数Pathに追加します)。

コンパイルと生成:

PHP ソース コードのコンパイル:

ローカル コンピューターには VS2012 および VS2010 がインストールされています。PHP ソース コードをコンパイルするには、ここで VS2012 を選択します。まず、以下に示すように、VS のコマンド ライン ステータスを入力します。

Enter: cd c:PHPDevphp-5.6.2

buildconf.bat ファイルを含む php ソース コード ディレクトリに変換します。 (ここでの PHPDev は私が自分で作成した上位ディレクトリです。実際のコンパイル プロセス中にローカル ディレクトリに変更してください)

「buildconfig.bat」と入力し、このバッチ コマンドでスクリプト プログラム buildconfig.js を起動し、ディレクトリを検索します。すべての .w32 ファイルは、Windows 環境でコンパイルできるように準備されています。操作が成功すると、「Now run 'configure --help'」というプロンプトが表示され、そうでない場合は、「configure スクリプトの生成中にエラーが発生しました。configure スクリプトはコピーされませんでした」というプロンプトが表示されます。コンパイルが成功したら、プロンプトに従って最初に「configure --help」と入力してコンパイル オプションを表示し、次にブログ投稿 http://demon.tw/software/compile-php-on-windows.html の指示に従って次のように入力します。 :

configure ?without-xml ?without-wddx --without-simplexml --without-dom --without-libxml --disable-zlib --without-pdo-sqlite ?-disable-odbc ?-disable-cgi - -enable-debug --without -iconv --disable-ipv6

これは、ブログ投稿の紹介とは少し異なります。 without の前に 2 つの「-」があります。configure --help プロンプトを参照してください。以下に示すように:

設定が完了したら、nmake と入力して実際のコンパイルを開始します。

【注意】: 以下の図に示すように、コンパイル処理中にエラーが発生する場合があります。この場合は、EditPlus や NotePad++ などの編集ツールを使用してファイルを utf-8 エンコーディングに転送し、nmake を再起動します。

コンパイルが完了すると、このフォルダーの下に、ソース コードをコンパイルした後に生成された php.exe ファイルが表示されます。 nmake のコンパイルが成功した結果です。

Debug_TS ディレクトリに入り、php.exe "echo 'Hello World';" と入力します。テストでは正しい出力が表示され、Windows プラットフォームでの php ソース コードのコンパイル作業が完了したことがわかります。無事に完了しました。

PHP スケルトンの生成:

php.exe ext_skel_win32.php --extname=zsgetdcmimage

PHP実行可能プログラムを取得後、スケルトンが生成されます。 PHP ソース コードで ext フォルダーに入ると、スケルトンの生成に使用される 2 つのファイル、ext_skel と ext_skel_win32.php が表示されます。 ext_skel_win32.php を開くと、スケルトン プログラムの構築方法が大まかにわかります。実際には、Cgywin に提供されている sh.exe ツールを使用して sh.exe ext_skel を起動し、プロジェクトに基づいて C/C++ ダイナミック ライブラリを作成します。 php スクリプトを通じて、自分で指定したプロジェクトに自動的に変更されます。ソース コードの extskeleton ディレクトリを開くと、skeleton.dsp という名前のプロジェクトがあることがわかります。これは、最終的に取得したスケルトン プロジェクトと名前が異なるだけです。

CでPHP拡張テストを書く:

基本的な環境が整ったので、実際にテストを行ってみましょう。

スケルトン プロジェクトは、プロジェクトと同じ名前のテスト関数を提供します。たとえば、私の zsgetdcmimage プロジェクトの関数は次のとおりです。

/* Remove the following function when you have successfully modified config.m4   so that your module can be compiled into PHP, it exists only for testing   purposes. *//* Every user-visible function in PHP should document itself in the source *//* {{{ proto string confirm_zsgetdcmimage_compiled(string arg)   Return a string to confirm that the module is compiled in */PHP_FUNCTION(confirm_zsgetdcmimage_compiled){	char *arg = NULL;	int arg_len, len;	char *strg;	len = spprintf(&strg, 0, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "zsgetdcmimage", arg);	RETURN_STRINGL(strg, len, 0);}
ログイン後にコピー

上でコンパイルした php ソース コードはデバッグ状態にあるためです。つまり、パラメータは --enable-debug であるため、スケルトン プログラムを作成するときは、それに応じて Debug_TS モードでコンパイルする必要があります。このファイルは Debug_TS フォルダーにあります。 PHP がコンパイルされた後のソース コード。


コンパイルが成功したら、生成された zsgetdcmimage.dll を Debug_TS の ext サブディレクトリ (コンパイル済み php 実行可能プログラムのディレクトリ) にコピーし、Debug_TS の php.ini を変更して、extension=ext/zsgetdcmimage .dll ステートメントを追加します。

最後に、次のコードを使用してテスト php ドキュメント test.php を作成します:

<?phpecho confirm_zsgetdcmimage_compiled("zssure");?>
ログイン後にコピー

コマンド ライン状態で、Debug_TS ディレクトリに移動し、php.exe test.php と入力します。次の出力が得られます:


これで、スケルトンの拡張とインスタンスのテストが完了しました。

追記: WampServer の PHP を置き換える

最初の 2 つのブログ投稿では、Apache+PHP+MySQL Web サービス フレームワークの機会を得るために wamp を使用し、起動後に上記でコンパイルした zsgetdcmimage.dll 拡張機能を c:wampbinphp5.5.12ext に置きました。 wampServer を呼び出すことができず、次のエラー メッセージが表示されます:

このエラーは、php5.6.2 拡張機能スケルトンを使用して生成された拡張機能が php5.5.12 では一致しないことを示します。この場合、以前に構築した WEB PACS プラットフォームに PHP 拡張スケルトンを追加するには 2 つのオプションしかありません: 1) 対応するバージョンの php5.5.12 のソース コードを再ダウンロードし、上記の記録に従ってスケルトン プログラムを再生成します。 ; 2) wamp インストールパッケージ php を置き換えます。

元々 WampServer の構成についてあまり知らなかったので、この機会に勉強したいと思いました。そこで、WampServer インストール パッケージ内の PHP を置き換えてみることにしました。元の php5.5.12 を php5.6.2 に置き換えました。ネットで検索すると、関連する情報がたくさん見つかりました。基本的な運用上のアイデアは主に、これら 2 つのブログ投稿 http://www.cnblogs.com/heiing/archive/2011/11/15/2249948.html および http://pcwanli.blog.163.com/ の紹介を参照しています。 blog /static/45315611201441811572810/ にあるように、前の 2 つのブログ投稿の紹介は少し単純で、あまり論理的ではありません。次に、Win7 32 ビット + WampServer-64-bits-php-5-5 環境での具体的な実装手順を示します。まず、c:wampbinphp ディレクトリに移動し、PHP 公式 Web サイトからダウンロードした最新の Windows バイナリ インストール パッケージをこのディレクトリに解凍します。たとえば、php5.6.2 のフル パスは c:wampbinphpphp5.6.2 です。その後の変更方法とシーケンスは次のとおりです。以下の通り:

WampServer の変更 2wampmanager.iniPHP 変更 1php.ini1) extension_dir を php.exe の新しいバージョンのパスに設定します。extension_dir = "c:wampbinphpphp5.6.2ext"PHP 変更 2phpForApache.iniphp.ini ファイルをコピーし、名前を phpForApache.ini に変更しますAPACEH 変更httpd.conf
WampServer 変更 1 wampmanager.conf

[php] タグは新しいバージョン番号 5.6.2

に置き換えられます

[phpCli] タグ内のバージョン番号は 5.6.2

に置き換えられます
NotePad++ や EditPlus などのテキスト エディタを使用して、ファイル内の phpX.X.X を検索し、

[注]: X.X に置き換えます。 6.2]、[phpVersion] の下のキャプションなど。

2) 次に、extension= コメントを選択的にキャンセルします。 XXX.dll に、php 拡張子を追加します
高速CGI構成モジュール内の php の

バージョン番号 は、次のように変更されます。

LoadModule php5_module "c:/wamp/bin/php/php5.6.2/php5apache2_4.dll"

PHPIniDir c:/wamp/bin/ php/php5. 6.2

LoadModule fcgid_module modules/mod_fcgid.so

AddHandler fcgid-script .fcgi .php

#php.ini格納ディレクトリ

FcgidInitialEnv P HPRC「c:/ wamp/bin/ php/php5.6.2"

# すべてのリクエストを処理する前に php-cgi プロセスが終了しないように、PHP_FCGI_MAX_REQUESTS を FcgidMaxRequestsPerProcess 以上に設定します

FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 1000

#php-cgi1 件あたりのリクエストの最大数process

FcgidMaxRequestsPerProcess 1000

#php-cgi最大プロセス数

FcgidMaxProcesses 5

#最大実行時間

FcgidIOTimeout 120

FcgidIdleTimeout 120

#php-cgi

のパス

FcgidWrapper "c:/wamp/bin/php/php5.6.2/php-cgi.exe" .php

AddType application/x-httpd-php .php

実際のテスト

1) PHP スケルトンを使用してコンパイルされた zsgetdcmimage.dll 拡張機能を php5.6.2ext ディレクトリに配置します

2) wampwww にテスト php を作成しますディレクトリ ファイル、test.php

localhosttest.php

と入力すると、次の出力が表示されます:

これまでのところ、WampServer インストール パッケージの PHP バージョンを変更しています順調に進んだ. 完了、合格 多くの努力の末、3 つのブログ投稿で WEB PACS 開発の基本環境を構築することに成功しました。その後、PHP の拡張スケルトンと DCMTK を組み合わせて WEB PACS のさまざまな機能を実現する方法の紹介を開始します。

フォローアップコラムブログ紹介:

PHP SkelとDCMTKを組み合わせてWEB PACSアプリケーションを開発する

DCMTKを使用してWMLサーバーを構築する

Oracleを使用してDICOMデータを直接操作する

C#のasy同期的なプログラミングモードは fo- dicom のアプリケーション

VMWare の 3 つのネットワーク接続モードの実践テスト

著者:

zssure@1 63.com

時間: 2014-10-31

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

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles