『壹』 如何使用php調用ArcGIS Server的Soap介面
前一陣子,簡單的學習了一下ArcGIS Server,在開發層次上ArcGIS Server支持兩種協議,一個是老的Soap協議,也就是webservice,另外一種是REST協議,其中REST協議是從ArcGIS Server9.3開始支持的協議,也是ESRI今後只要支持的協議,但是老的Soap協議還繼續支持。該章得內容主要介紹如何使用PHP來調用ArcGIS Server的WebService。
查看ArcGIS Server的SOAP SDK的幫助的時候,會發現所提供的示例代碼只有c#,vb.net和java的,並沒有PHP語言的示例,實際上並不是不支持PHP語言,從PHP toolkits include PHP-SOAP and NuSOAP上可以看出PHP是支持Soap協議的,只不過使用PHP並沒有提供現成的工具可以將WSDL轉換成本地化的類,而.NET SDK提供了Wsdl.exe工具,java提供了Apache Axis工具可以將WSDL中的類型轉換成本地化類。
當使用PHP調用WebService的時候,當輸入的參數是簡單數據類型的時候是沒有任何問題的,返回值類型是類得時候也沒有任何的問題,但是當輸入參數的值類型為某個類得時候,就無法調用了,這些類太多了,自己手寫這些類幾乎是不可能,因此找到一個類似於Wsdl.exe和Apache Axis的工具還是很有必要的,在網上終於搜到一個工具,名字為wsdl2php.php可以實現該功能,其代碼如下所示:
// +------------------------------------------------------------------------+
// | wsdl2php |
// +------------------------------------------------------------------------+
// | Copyright (C) 2005 Knut Urdalen |
// +------------------------------------------------------------------------+
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// +------------------------------------------------------------------------+
// | This software is licensed under the LGPL license. For more information |
// | see http://wsdl2php.sf.net |
// +------------------------------------------------------------------------+
ini_set('soap.wsdl_cache_enabled', 0); // disable WSDL cache
//if( $_SERVER['argc'] != 2 ) {
// die("usage: wsdl2php /n");
//}
$wsdl = "liuf:8399/arcgis/services/catchment/MapServer?wsdl";
print "Analyzing WSDL";
try {
$client = new SoapClient($wsdl);
} catch(SoapFault $e) {
die($e);
}
print ".";
$dom = DOMDocument::load($wsdl);
print ".";
// get documentation
$nodes = $dom->getElementsByTagName('documentation');
$doc = array('service' => '',
'operations' => array());
foreach($nodes as $node) {
if( $node->parentNode->localName == 'service' ) {
$doc['service'] = trim($node->parentNode->nodeValue);
} else if( $node->parentNode->localName == 'operation' ) {
$operation = $node->parentNode->getAttribute('name');
//$parameterOrder = $node->parentNode->getAttribute('parameterOrder');
$doc['operations'][$operation] = trim($node->nodeValue);
}
}
print ".";
// get targetNamespace
$targetNamespace = '';
$nodes = $dom->getElementsByTagName('definitions');
foreach($nodes as $node) {
$targetNamespace = $node->getAttribute('targetNamespace');
}
print ".";
// declare service
$service = array('class' => $dom->getElementsByTagNameNS('*', 'service')->item(0)->getAttribute('name'),
'wsdl' => $wsdl,
'doc' => $doc['service'],
'functions' => array());
print ".";
// PHP keywords - can not be used as constants, class names or function names!
$reserved_keywords = array('and', 'or', 'xor', 'as', 'break', 'case', 'cfunction', 'class', 'continue', 'declare', 'const', 'default', 'do', 'else', 'elseif', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'extends', 'for', 'foreach', 'function', 'global', 'if', 'new', 'old_function', 'static', 'switch', 'use', 'var', 'while', 'array', 'die', 'echo', 'empty', 'exit', 'include', 'include_once', 'isset', 'list', 'print', 'require', 'require_once', 'return', 'unset', '__file__', '__line__', '__function__', '__class__', 'abstract', 'private', 'public', 'protected', 'throw', 'try');
『貳』 PHP如何啟動soap服務
修改PHP.ini文件,
找到;extension=php_soap.dll去掉前面的分號,
重起IIS或者apache就可以了
『叄』 php soap擴展做webservice的時候 如何傳入數組或者對象參數
SOAP可以傳遞數組和對象,比較復雜不便詳述。你可以在網上查閱SOAP的規范。SOAP的對象需要定義在wsdl里。這就要求java調用方也定義這些對象。
使用SOAP要注意一個問題:SOAP沒有統一的標准,不同語言對SOAP的實現有微小差別,有可能導致不兼容。
編寫SOAP的wsdl是件麻煩而且痛苦的事。你可以試試使用第三方庫。Yii框架就提供一個強大的SOAP解決方案。你可以通過注釋和類,自動生成wsdl。個人不推薦在PHP中使用SOAP,因為PHP不像其他語言類似JAVA、.NET,提供強大的SOAP支持。
你可以考慮輕量級API,也可以考慮XML-RPC。並不比SOAP差,而且很靈活。
望採納,謝謝!
『肆』 PHP 頁面調用天氣預報web服務 我想在一個PHP頁面直接調用現成的webservice
完全可以。前提是要打開soap擴展,調用方法如下:
<?php
$client = new SoapClient('http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl');
$parm=array('theCityCode'=>'三亞','theUserID'=>'');
$result=$client->getWeather($parm);
print_r($result);
?>
『伍』 在伺服器配置PHP的時候需要開通幾個擴展,請問這幾個擴展對我的網站有何用
網路不誤導你 ,我也是網路的,擴展全開都行,不妨礙你用就是了,幹嘛非要這么細致的分析每個擴展的作用呢?給你一份快餐,要麼你吃了,要麼你不吃。你會分析其他的情況嗎?
擴展庫 說明 註解
php_bz2.dll bzip2 壓縮函數庫 無
php_calendar.dll 歷法轉換函數庫 自 PHP 4.0.3 起內置
php_cpdf.dll ClibPDF 函數庫 無
php_crack.dll 密碼破解函數庫 無
php_ctype.dll ctype 家族函數庫 自 PHP 4.3.0 起內置
php_curl.dll CURL,客戶端 URL 庫函數庫 需要:libeay32.dll,ssleay32.dll(已附帶)
php_cybercash.dll 網路現金支付函數庫 PHP <= 4.2.0
php_db.dll DBM 函數庫 已廢棄。用 DBA 替代之(php_dba.dll)
php_dba.dll DBA:資料庫(dbm 風格)抽象層函數庫 無
php_dbase.dll dBase 函數庫 無
php_dbx.dll dbx 函數庫
php_domxml.dll DOM XML 函數庫 PHP <= 4.2.0 需要:libxml2.dll(已附帶),PHP >= 4.3.0 需要:iconv.dll(已附帶)
php_dotnet.dll .NET 函數庫 PHP <= 4.1.1
php_exif.dll EXIF 函數庫 需要 php_mbstring.dll。並且在 php.ini 中,php_exif.dll 必須在 php_mbstring.dll之後載入。
php_fbsql.dll FrontBase 函數庫 PHP <= 4.2.0
php_fdf.dll FDF:表單數據格式化函數庫 需要:fdftk.dll(已附帶)
php_filepro.dll filePro 函數庫 只讀訪問
php_ftp.dll FTP 函數庫 自 PHP 4.0.3 起內置
php_gd.dll GD 庫圖像函數庫 在 PHP 4.3.2 中刪除。此外注意在 GD1 中不能用真彩色函數,用 php_gd2.dll 替代。
php_gd2.dll GD 庫圖像函數庫 GD2
php_gettext.dll Gettext 函數庫 PHP <= 4.2.0 需要 gnu_gettext.dll(已附帶),PHP >= 4.2.3 需要 libintl-1.dll,iconv.dll(已附帶)。
php_hyperwave.dll HyperWave 函數庫 無
php_iconv.dll ICONV 字元集轉換 需要:iconv-1.3.dll(已附帶),PHP >=4.2.1 需要 iconv.dll
php_ifx.dll Informix 函數庫 需要:Informix 庫
php_iisfunc.dll IIS 管理函數庫 無
php_imap.dll IMAP,POP3 和 NNTP 函數庫 無
php_ingres.dll Ingres II 函數庫 需要:Ingres II 庫
php_interbase.dll InterBase functions 需要:gds32.dll(已附帶)
php_java.dll Java 函數庫 PHP <= 4.0.6 需要:jvm.dll(已附帶)
php_ldap.dll LDAP 函數庫 PHP <= 4.2.0 需要 libsasl.dll(已附帶),PHP >= 4.3.0 需要 libeay32.dll,ssleay32.dll(已附帶)
php_mbstring.dll 多位元組字元串函數庫 無
php_mcrypt.dll Mcrypt 加密函數庫 需要:libmcrypt.dll
php_mhash.dll Mhash 函數庫 PHP >= 4.3.0 需要:libmhash.dll(已附帶)
php_mime_magic.dll Mimetype 函數庫 需要:magic.mime(已附帶)
php_ming.dll Ming 函數庫(Flash) 無
php_msql.dll mSQL 函數庫 需要:msql.dll(已附帶)
php_mssql.dll MSSQL 函數庫 需要:ntwdblib.dll(已附帶)
php_mysql.dll MySQL 函數庫 PHP >= 5.0.0 需要 libmysql.dll(已附帶)
php_mysqli.dll MySQLi 函數庫 PHP >= 5.0.0 需要 libmysql.dll(PHP <= 5.0.2 中是 libmysqli.dll)(已附帶)
php_oci8.dll Oracle 8 函數庫 需要:Oracle 8.1+ 客戶端庫
php_openssl.dll OpenSSL 函數庫 需要:libeay32.dll(已附帶)
php_oracle.dll Oracle 函數庫 需要:Oracle 7 客戶端庫
php_overload.dll 對象重載函數庫 自 PHP 4.3.0 起內置
php_pdf.dll PDF 函數庫 無
php_pgsql.dll PostgreSQL 函數庫 無
php_printer.dll 列印機函數庫 無
php_shmop.dll 共享內存函數庫 無
php_snmp.dll SNMP 函數庫 僅用於 Windows NT!
php_soap.dll SOAP 函數庫 PHP >= 5.0.0
php_sockets.dll Socket 函數庫 無
php_sybase_ct.dll Sybase 函數庫 需要:Sybase 客戶端庫
php_tidy.dll Tidy 函數庫 PHP >= 5.0.0
php_tokenizer.dll Tokenizer 函數庫 自 PHP 4.3.0 起內置
php_w32api.dll W32api 函數庫 無
php_xmlrpc.dll XML-RPC 函數庫 PHP >= 4.2.1 需要 iconv.dll(已附帶)
php_xslt.dll XSLT 函數庫 PHP <= 4.2.0 需要 sablot.dll,expat.dll(已附帶)。PHP >= 4.2.1 需要 sablot.dll,expat.dll,iconv.dll(已附帶)。
php_yaz.dll YAZ 函數庫 需要:yaz.dll(已附帶)
php_zip.dll Zip 文件函數庫 只讀訪問
php_zlib.dll ZLib 壓縮函數庫 自 PHP 4.3.0 起內置
『陸』 php常用擴展有哪些
這個是php擴展庫支持。
在php.ini裡面可以看到952行。
extension=php_rar.dll
;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_dba.dll
;extension=php_exif.dll
;extension=php_fileinfo.dll
extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_ming.dll
;extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
;extension=php_oci8.dll
;extension=php_oci8_11g.dll
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_phar.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
;extension=php_snmp.dll
;extension=php_soap.dll
extension=php_sockets.dll
;extension=php_sqlite.dll
;extension=php_sqlite3.dll
;extension=php_sybase_ct.dll
;extension=php_tidy.dll
;extension=php_xmlrpc.dll
;extension=php_xsl.dll
;extension=php_zip.dll
extension= php_memcache.dll
每一行前面分號去掉的表示開啟擴展庫的。
有些擴展庫是安裝的時候默認開啟的,有些需要手動開啟。
還有一些擴展庫需要自己去下載庫文件(要對應相應的版本)
下載的庫文件放在php安裝根目錄下面的ext目錄下面。當然這個目錄也是可以自己配置的。
『柒』 php怎麼在線載入 soap模塊
修改PHP.ini文件,找到;extension=php_soap.dll去掉前面的分號,重起IIS或者apache就可以了
『捌』 怎樣在php環境根目錄下找到php.ini文件,搜索soap,定位到;extension=php_openssl.dll 我怎麼找不到
你好,從php5.0後,php就自帶了soap的支持,通過修改配置文件ini就可以激活soap。所以說,很有可能是你的php版本還未達到5以上。希望能幫助到你,親~~
『玖』 怎麼把php webservice 配置到
php使用webservice的時候 需要開啟soap擴展 否則webservice是不好使的 當然使用nusoap這種第三方插件也可以。。 ------------------------------------------------- 給我留言 我給你發一份 記得選擇滿意答案哦!