PHP程序与服务器端通讯方法小结

2016-01-29 15:07 5 1 收藏

PHP程序与服务器端通讯方法小结,PHP程序与服务器端通讯方法小结

【 tulaoshi.com - PHP 】

 

  假设有10个网站,分布在各地,它们的库存要同步,而数据库不支持远程连接。

  我们要实时地取得服务器的库存数,可以通过很多种方法,我所知道的有以下几种:

   ·CURL方式

   ·SOCKET方式

   ·PHP5中的SOAP方式

  以下分别给出示例来实现它:

  CURL方式

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

  client.php

<?php
$psecode = ’NDE005’;
$website = ’www.abc.com’;
$amt = 1;
$pwd = 123456;
$ch = curl_init();
$curl_url = "http://ics1.server.com/index.php?web=" . $website .
"&pwd=" . $pwd . "&action=check&pseid=" . $psecode .
"&amt=" . $amt;
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接输出,返回到变量
$curl_result = curl_exec($ch);
$result = explode(’,’, $curl_result);
curl_close($ch);
print_r($result);
?>

  服务器端只需按一定的格式输出,然后客户端按此格式接收就可以了如:

echo "OK," . $fpsecode . "," . $fbalance ;//以逗号分隔

  SOCKET方式

  这个要借助第三方类库HttpClient,可以到这里下载:http://scripts.incutio.com/httpclient/

<?php
require_once ’class/HttpClient.php’;
$params = array(’web’ => ’www.abc.com’,
’pwd’ => ’123456’,
’action’ => ’check’,
’pseid’ => ’NDE005’,
’amt’ => 1);
$pageContents = HttpClient::quickPost(’http://ics.server.com/index.php’, $params);
$result = explode(’,’, $pageContents);
print_r($result);
?>

  PHP5中的SOAP方式

  server.php

<?php
function getQuote($fpsecode) {
global $dbh;
$result = array();
try {
$query = "SELECT fprice, fcansale, fbalance, fbaltip FROM tblbalance where upper(trim(fpsecode)) = :psecode limit 1";
$stmt = $dbh->prepare($query);
$stmt->execute(array(’:psecode’ => strtoupper(trim($fpsecode))));
$stmt->bindColumn(’fprice’, $fprice);
$stmt->bindColumn(’fcansale’, $fcansale);
$stmt->bindColumn(’fbalance’, $fbalance);
$stmt->bindColumn(’fbaltip’, $fbaltip);
while($row = $stmt->fetch(PDO_FETCH_BOUND)) {
//
}
} catch (PDOException $e) {
echo $e->getMessage();
}
return $fprice; //你可以返回一个数组
}

$dsn = ’pgsql:host=192.168.*.* port=5432 dbname=db user=123456 password=123456’;
try {
$dbh = new PDO($dsn);
} catch (PDOException $e) {
die(’Connection failed: ’ . $e->getMessage());
}
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$server = new SoapServer("stockquote.wsdl"); //配置文件
$server->addFunction("getQuote");
$server->handle();
?>

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/php/)

  stockquote.wsdl

<?xml version =’1.0’ encoding =’UTF-8’ ?>
<definitions name=’StockQuote’
targetNamespace=’http://example.org/StockQuote’
xmlns:tns=’ http://example.org/StockQuote ’
xmlns:soap=’http://schemas.xmlsoap.org/wsdl/soap/’
xmlns:xsd=’http://www.w3.org/2001/XMLSchema’
xmlns:soapenc=’http://schemas.xmlsoap.org/soap/encoding/’
xmlns:wsdl=’http://schemas.xmlsoap.org/wsdl/’
xmlns=’http://schemas.xmlsoap.org/wsdl/’>

<message name=’getQuoteRequest’>
<part name=’symbol’ type=’xsd:string’/>
</message>
<message name=’getQuoteResponse’>
<part name=’Result’ type=’xsd:float’/>
</message>

<portType name=’StockQuotePortType’>
<operation name=’getQuote’>
<input message=’tns:getQuoteRequest’/>
<output message=’tns:getQuoteResponse’/>
</operation>
</portType>

<binding name=’StockQuoteBinding’ type=’tns:StockQuotePortType’>
<soap:binding style=’rpc’
transport=’http://schemas.xmlsoap.org/soap/http’/>
<operation name=’getQuote’>
<soap:operation soapAction=’urn:xmethods-delayed-quotes#getQuote’/>
<input>
<soap:body use=’encoded’ namespace=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/>
</input>
<output>
<soap:body use=’encoded’ namespace=’

来源:http://www.tulaoshi.com/n/20160129/1495280.html

延伸阅读
标签: Web开发
用asp.net开发Ajax有两种主流,一种是微软推出的技术,其中一个最常用的就是UpdatePanel控件,还有一种是AjaxPro技术。 这种技术有着各自的特点。采用微软的技术开发也沿用了微软一贯的简单化、傻瓜化的特点,开发简单Ajax程序几乎不需要了解任何网页脚本知识和XHTML知识,缺点也有一些,通常会带来一些不必要的网络流量(整个UpdatePanel控件...
标签: Web开发
1. Accordion Accordion可以让你设计多个panel 并且一次只显示一个Panel .在页面上的显示效果就像是使用了多个CollapsiblePanels只不过每一次只展开其中一个CollapsiblePanel.Accordion控件内部包含了若干个AccordionPane,每一个AccordionPane的template里包括了对其Header和Content的定义。我们可以在后台代码中通过SelectedIndex属性取得...
标签: ASP
  以前在这里也曾经有一些文章谈到了在ASP中生成动态图表的问题,但那些文章中所谈到的一些方法都有某些方面的限制,如需要在客户端安装office2000或安装OWC,有些则可能在Intranet中使用时没什么问题,但在通过Internet访问的时候,就可能出现无法正常工作的现象(这主要和SQL Server的安全设置有关)。那么,我们如何来避免这些问题呢?...
标签: PHP
    服务器负载太大而影响程序效率也是很常见的,我们需要对此进行测试。这里我以目前最常用的Apache服务器为例。 Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试,看看在重负荷之下服务器的表现如何。ApacheBench 可以针对某个特定的 URL 仿真出连续...
代码如下: using System; using System.Collections; using System.Text; using System.IO; using System.Collections.Specialized; using System.Text.RegularExpressions; using System.Diagnostics; namespace CSS { public class App { public static void Main(string[] args) { //初始化CSS解析器 CssDocument doc = ne...

经验教程

538

收藏

56
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部