検索

学習教材は次のとおりです: [Wrox]Professional Open Source Web Services
Chapter 8 PHP and Web Services
英語版電子書籍ダウンロード [pdf]

全文は 3 つの部分に分かれています: 概要。 Web サービス開発における PHP の利点は、Unix システムに PHP をインストールして構成し、PHP で SOAP を使用することです。 NuSOAP ツールキット、HTTP プロキシ、SOAP over HTTPS、ドキュメント スタイル メッセージングなどの NuSOAP の高度な Web サービス機能。また、セキュリティの問題、言語とデータ型のマッピング、PHP での XML-RPC など、PHP Web サービスをプログラミングするときに遭遇するいくつかの問題を解決する方法についても説明します。 XML-RPC の特徴、XML-RPC と SOAP の比較、次に Useful, Inc. の実装を使用した XML-RPC クライアントおよびサーバー プログラムの作成について説明します。


セクション 1. 概要 PHP には、Expat パーサーをバインドすることによる XML サポートが組み込まれています。さらに、domxml (libxml ライブラリを使用して DOM、Xpath、および Xlink サポートを提供)、xslt ( Sablotron や libxslt などの複雑なサードパーティ XSLT ライブラリ用のアウトソーシング プログラム。

Web サービス開発に役立つもう 1 つの PHP 拡張機能は、CURL (Client URL Library) です。 CURL を使用すると、HTTP、HTTPS、FTP、telnet、LDAP などのさまざまなプロトコルを介して通信できます。HTTPS は、Web サービスとサーバー間の安全な接続に特に役立ちます。

SOAP と XML-RPC の長所と短所: 強力な型拡張 (SOAP) US-ASCII、UTF-8、UTF-16 などのユーザー定義の文字セット (SOAP) 受信者を指定 [コンテナーを指定しますか?] (SOAP) コンテナー理解できないメッセージを受信すると失敗する (SOAP) 使いやすい (XML-RPC) シンプルなデザイン (XML-RPC) PHP を構成する: Apache: PHP を Apache モジュールとして実行するには、--with-apxs オプションを使用します--with-apxs=/www/bin/apxs などのようにコンパイルします。 [現在 Apache2 を使用しており、コンパイルした PHP で使用されるオプションは --with-apxs2=/usr/sbin/apxs です] DOMXML: オプションの関数。XML ドキュメントの解析に非常に役立ちます。 libxml ライブラリ (バージョン>=2.4.2) を事前にインストールする必要があり、コンパイル時に --with-dom=DIR オプションが使用されます (デフォルトの DIR は /usr)
http://www.xmlsoft.org /downloads.html
libxml 2.6.4 - ソース - 2.52 MB
XSLT: オプションの機能。XML データを他のタイプのドキュメントに変換するのに役立ちます。 --enable-xslt --with-xslt-sablot オプションを使用してコンパイルします。 Sablotron XSLT ライブラリ (http://www.gingerall.com/) を事前にインストールする必要があります (デフォルトの DIR は /usr/lib または /usr/local/lib)。
Sablotron 1.0.1 - ソース - 470 KB
CURL: 前述したように、SSL サポートが提供されている場合はインストールする必要があります。 --with-curl=DIR オプションを使用してコンパイルします。 CURL ライブラリ (バージョン >=7.0.2-beta) をプレインストールすることも必要です。 [PHP はすでにインストールされています。 CURL 情報: libcurl/7.10.7 OpenSSL/0.9.7c zlib/1.1.4]

昨日から学習を続けます。今日は主に NuSOAP についてです




セクション 2. SOAP NuSOAP の概要: NuSOAP は、NuSphere Corporation (http://www.nusphere. com/
) 開発。 NuSOAP の利点の 1 つは、拡張機能ではなく純粋に PHP コードで記述されているため、幅広い用途があることです。

構造:
インストール構成: http://dietrich.ganx4.com/nusoap/ からダウンロードし、zip ファイルから nusoap.php ファイルを抽出して include ディレクトリに置き、
include('nusoap を前に追加します)スクリプト .php'); これで完了です。

例: 以下は、単純な SOAP クライアント プログラムです。

//パラメータは配列として渡す必要があります
//変数は配列形式に変換する必要があります

$parameters=array($myString);

//soapclient オブジェクトを作成します。パラメータはサーバーの URL です
$ s= newsoapclient('http://www.douzi.org/me/php_ws/soap_server.php');

//リモートメソッドを呼び出すと、戻り値は $result に格納されます
//戻り値は文字列、整数、配列などの PHP 変数の型
$result=$s->call('echoString', $parameters);

//エラー検出
if (!$err=$s->getError) ()) {
echo ' Result: '.$result; //success
} else {
echo 'Error: '.$err; }

//デバッグ、以下を含む SOAP リクエストと応答メッセージHTTP ヘッダー
echo "

".$s->request."";
echo "".$s->response.""; ;



対応するサーバー側プログラム:soap_server.php

//単純なサーバー
require('nusoap.php');

//新しいsoap_serverオブジェクトを作成し、リモート呼び出しを許可するメソッドを登録します
$s=newsoap_server;
$s->register('echoString');
$s->register('echoArray');

/*
[記事には次のように書かれています: 登録ステップなしで、任意の PHP 関数をリモートで作成できます。通話はセキュリティ上の大きなリスクとなります。でも登録は必須だということで試してみました。また、結果を返す関数のみをリモート メソッドとして直接宣言できます。たとえば、echo() は機能しませんが、strto lower() は機能します。 ]
*/

function echoString($inputString) {
//クラス性チェック
if(is_string($inputString)) {
return "Hello, ".$inputString; } else {
//soap_fault クラスが使用される Generateエラーメッセージ
return newsoap_fault('client', '', 'このサービスへのパラメータは文字列である必要があります。')
//soap_fault(faultcode,aultactor,faultstring,faultdetail); //上記はエラー処理です。クラス コンストラクターの形式
//faultcode は値である必要があります。クライアントまたはサーバーに設定して、どちら側でエラーが発生したかを示すことができます。
//faultactor はまだ NuSOAP に実装されていません。
//障害文字列のエラー メッセージ。
//faultdetail 詳細なエラー情報。 XML タグを使用できます。

//コンストラクターに加えて、soap_fault クラスには、serialize() メソッドもあります
//エラー メッセージをシリアル化し、完全な SOAP メッセージを返します。例:
/*
$fault = newsoap_fault(' client ', '', 'inputString パラメータは空であってはなりません');
echo $fault->serialize();
*/
}
}

// 配列型の使用方法を示します
function echoArray($inputString) ) {
return $inputString[0]."+".$inputString[1];

}

//最後のステップは、受信したすべての POST データを SOAP サーバーのサービス メソッドに渡すことです。リクエストを処理し、適切な関数を呼び出します。
$s->service($HTTP_RAW_POST_DATA);
?>



複雑なデータ型の使用: 配列。生成された SOAP の本体コードは次のとおりです。




string1
string2






soapval を使用して、複合データ型 (複合型のサンプル) を生成します。生成された SOAP の本体コードは次のとおりです:


123 Freezing Lane
Nome

Alaska
12345

1234567890
0987654321





プログラム例:soapval.phpの実行


//soapval: 一般的な化合物タイプのサンプル
include('nusoap.php');

$address=array(
'street'=>'123 Freezing Lane',
'city'=>'Nome',
'state'=> ' アラスカ',
'zip'=>12345,
'電話番号'=>array('home'=>'1234567890', 'mobile'=>'0987654321')

$s= newsoapval('myAddress', 'address', $address, '', 'http://myNamespace.com');

print "<xmp>".$s->serialize()."> ";

?>




WSDL WSDL は、Web サービスを記述するために使用される XML 言語です。これは、サービスにアクセスするために必要なすべての情報を Web サービス クライアントに提供する機械可読形式です。 NuSOAP は、特に WDSL ファイルを解析し、そこから情報を抽出するクラスを提供します。 soapclient オブジェクトは、開発者がサービスを呼び出すのを容易にするために wsdl クラスを使用します。 WSDL 情報を利用してメッセージを作成することにより、プログラマは、それを呼び出す操作の名前とパラメータを知るだけで済みます。

NuSOAP 経由で WSDL を使用すると、次の利点があります: 名前空間、エンドポイント URL、パラメーター名などのすべてのサービス メタファイルを WSDL ファイルから直接取得できるため、クライアントのダイナミクスがサーバー側の変更に適応できます。このデータは常にサーバーから利用できるため、このデータをユーザー スクリプトにハードコーディングする必要はなくなりました。 これにより、soap_proxy クラスを使用できるようになります。このクラスは、soapclient クラスから派生し、WDSL ファイルで詳細に説明されている操作に対応するメソッドを追加します。ユーザーはそれを通じてこれらのメソッドを直接呼び出すことができるようになりました。 soapclient クラスには、soap_proxy クラスのオブジェクトを返す getProxy() メソッドが含まれています。 soap_proxy クラスは、soapclient クラスから派生し、WSDL ドキュメントで定義された操作に対応するメソッドを追加し、ユーザーがエンドポイントのリモート メソッドを呼び出せるようにします。これは、soapclient オブジェクトが WDSL ファイルで初期化されている場合にのみ適用されます。長所はユーザーにとっての使いやすさですが、短所はパフォーマンスです (PHP でのオブジェクトの作成には時間がかかります)。そして、この機能は実用的な目的には役立ちません。
例: wsdl.php の実行

//wsdl の簡単なデモ ファイル
include('nusoap.php');

// SOAP ソースはスターの誕生日と死亡日を提供するサービスです
//まず、soapclient オブジェクトを作成し、WSDL ファイルの URL をコンストラクターに渡します。
//渡したものが SOAP エンドポイントではなく WSDL であることをクライアントが認識できるように、2 番目のパラメーターを後で使用する必要があります。
$s=newsoapclient('http://www.abundanttech.com/webservices/deadoralive/deadoralive.wsdl', 'wsdl');

//プロキシ クラスを生成します
$p=$s->getProxy( );

//リモート関数を呼び出す
$sq=$p->getTodaysBirthdays();

if (!$err=$p->getError()) {
print_r($sq) }; {
print "ERROR: $err"; }

print 'REQUEST:<xmp>'.$p->request.'</xmp>';
print 'RESPONSE:<xmp>'.str_replace(' >nresponse).'</xmp>'

?>



添付: 便利な Web サービスのデモ サイト: http:// www.mindreef.net/soapscope/wsdldemo



これは最後のセクションですが、PHP は依然としてクライアントに非常に適していると感じます。このセクションでは主に XML-RPC について説明します。

私はかつて XML-RPC の学習ノートを持っていましたが、その内容はこれと非常によく似ていました。






セクション 3. XML-RPC XML-RPC データ型
XML-RPC は、限られた数のデータ型のみをサポートします。 PHP データ型との対応関係は次のとおりです。


Useful Inc. XML-RPC 実装 -- phpxmlrpc
使用する XML-RPC ツールキットは Useful, Inc. の Edd Dumbill によって作成されており、ダウンロード URL は http: // phpxmlrpc.sourceforge.net/、これにはクライアントとサーバーの XML-RPC 実装が完全に含まれています。

クライアントとサーバーはそれぞれ xmlrpc_client クラスと xmlrpc_server クラスによって実装され、主に XML-RPC メッセージの送受信に使用されます。 xmlrpcval クラスは、PHP 変数を XML-RPC と同等のデータ型にエンコードし、パラメーターをリモート メソッドに渡すために使用されます。反対のプロセスでは xmlrpc_decode() 関数を使用します。 XML-RPC メッセージは、xmlrpcmsg クラスを使用してパラメータ リストを渡すことによって作成されます。

xmlrpc_client クラスは、xmlrpcmsg クラスを使用して作成された XML-RPC メッセージを送信します。サーバー側では、xmlrpc_server クラスがこれらの受信メッセージを xmlrpcmsg オブジェクトに解析します。このオブジェクトは、単一のパラメーターとしてユーザー関数に渡されます。この関数は、xmlrpc_server クラスによってシリアル化されてクライアントに返されるために使用される xmlrpcresp オブジェクトを返す必要があります。この基本的なアーキテクチャを次の図に示します。


インストールと構成
http://phpxmlrpc.sourceforge.net/ からダウンロードして解凍し、xmlrpc.inc と xmlrpcs.inc をインクルード パスに配置します。

次の include ステートメントをクライアント プログラムのヘッダーに追加するだけです:
include('xmlrpc.inc');

次の include ステートメントをサーバー プログラムのヘッダーに追加するだけです:
include('xmlrpc.inc' );
include(' xmlrpcs.inc'); //サーバー側コード



XML-RPC クライアント: xmlrpc_client.php の実行



//xmlrpc_client.php
//XML-RPC クライアント デモ プログラム
require('xmlrpc.inc');

//クライアント オブジェクトを作成します。3 つのパラメータはパス、ホスト名、ポートです
$s=new xmlrpc_client ( '/xmlrpc/xmlrpc_server.php', 'www.windix.local', 80);

//変数のエンコードを可能にする xmlrpcval オブジェクトを作成します
//PHP 変数を XML 形式としてエンコードする xmlrpcval オブジェクトを作成しますXML-RPC で必要です
$inputString=new xmlrpcval('world', 'string');

//パラメータの配列を作成します
//パラメータは 1 つだけですが、配列に変換する必要があります。 xmlrpcmsg の 2 番目のパラメーターはパラメーター テーブルであるため
$parameters=array($inputString);

//メッセージ オブジェクトを作成します
//XML-RPC メッセージを作成します。パラメーターはリモート メソッド名とパラメーター テーブルです
$ msg =new xmlrpcmsg('echoString', $parameters);

//メッセージを送信し、応答を取得します
//メッセージを送信し、戻り値 $rsp は、次の 3 つのメソッドを含む xmlrpcresp オブジェクトです。 /faultCode () エラー コード、成功した場合は 0 が返されます
//faultString() エラー メッセージ
//value() 戻り値は、xmlrpcval オブジェクトの形式で存在し、PHP で使用する前にデコードする必要があります
$ rsp=$s->send( $msg);

// エラーをチェック
if($rsp->faultcode()==0) {
// PHP タイプへの応答をデコードします
// xmlrpc_decode () 関数は xmlrpcval オブジェクトをデコードするために使用されます
$response=xmlrpc_decode($rsp->value());

// 結果を出力します
var_dump($response); } else {
//エラーを表示
print 'Error: '.$rsp->faultcode().', '.$rsp->faultstring().'
}

// メッセージを表示
//それではメッセージの内容を確認してみましょう
$msg->createpayload();
print 'REQUEST:<xmp>'.$msg->payload.'</xmp>'; '.$rsp->serialize().'</xmp>';




XML-RPC サーバー: 'xmlrpc.inc');

//文字列をエコーするサービス
//リモート呼び出しを処理するためのカスタム関数
//この関数は、xmlrpcmsg オブジェクト型のパラメータが存在する必要があり、これのみが可能であることに注意してください
function echoString($msg) {

//パラメータを navtive 型にデコードします
//最初に xmlrpc_decode 関数を使用してデコードします
$inputString=xmlrpc_decode(array_shift($msg->params)) ;

//入力パラメータの有効性をチェックします

//データ型が正しい
if(is_string($inputString)) {
return new xmlrpcresp( new xmlrpcval('Hello, '.$inputString, 'string') );

} else { //またはエラーを返す
return new xmlrpcresp(0) , $xmlrpcerruser+1, "パラメーターの型 ".gettype($inputString)" が予期された型と一致しません。");
}

}

/ / サーバー オブジェクトをインスタンス化し、関数を登録します
// サーバー オブジェクトを初期化し、関数を登録します
//以下の配列は「ディスパッチ マップ」と呼ばれ、出力関数名の主キーを持つ項目は別の配列です
// 次の 3 つのメンバーが含まれます:
// function 関数の名前ここで実際に呼び出される関数名もサービス名と同じ echoString です
// 署名はオプションです。入力パラメータと出力パラメータのタイプ。最後のパラメータは出力パラメータ、前のパラメータは入力パラメータです
// docstring はオプションです。サービスのドキュメントが含まれており、HTML コンテンツを含めることもできます。

//xmlrpc_server には 2 番目のオプションの初期化パラメータも含まれています。0 に設定すると、サービスはリクエストをすぐに処理しません
//実行するにはサーバーの service() メソッド プロセスを使用する必要があります

$s=new xmlrpc_server ( array(
'echoString' => array(
'function' => 'echoString',
'signature' => array( array('string','string') ),
'docstring' => ; 'このサービスは Hello+input をエコーし​​ます
) )) >

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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、ReactLaravelのバックエンドでReactアプリを構築する:パート2、ReactMar 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

ホット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ヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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

SublimeText3 Mac版

SublimeText3 Mac版

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

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、