分页: 103/118 第一页 上页 98 99 100 101 102 103 104 105 106 107 下页 最后页 [ 显示模式: 摘要 | 列表 ]
Feb 11
主要功能:
不使用递归,直接采用order by按级排序;
支持无限分类;
显示类别时可设置从某类别下开始显示,以及设置是否显示子分类;是否带格式输出;
支持从任何目录的导航输出;
批量移动分类,批量移动文章,改写关联属性;
添加文章内容时,要存放亲缘树序列,目的:当选择某一分类查看时,可设置其子分类的文章是否也显示出来。

程序:无限分类(无递归)  + 无限联动 + 树状显示(多显示方式) +导航输出 +批量移动 正式版1.1
作者:欣然随风(QQ:276624915)
时间:2005-10-28


主要功能:
不使用递归,直接采用order by按级排序;
支持无限分类;
显示类别时可设置从某类别下开始显示,以及设置是否显示子分类;是否带格式输出;
支持从任何目录的导航输出;
批量移动分类,批量移动文章,改写关联属性;
添加文章内容时,要存放亲缘树序列,目的:当选择某一分类查看时,可设置其子分类的文章是否也显示出来。

数据表字段参考:
class_id  类别i++号
class_kiss  亲缘树序列(资源内容指向此作为奴属,格式1:1:1.. 包括自己当前序列)
class_base  根分类序列
class_son  子分类序列
class_tier  分类所在层
class_name  分类名称

其它:
填写好数据库信息类便可直接运行。


--------------------------------------------------------------------------------


类文件:sort_class.php


// 数据库信息类
class db
{
const mysql_hdb = "localhost"; // 数据库主机名
const mysql_udb = "root";   // 数据库用户名
const mysql_pdb = "jjfzzzm";  // 数据库密码
const mysql_ddb = "test";   // 数据库名
static $cn;       // 数据库连接ID

const table_sort = "class"; // 数据表名

function __construct()
{
 self::$cn = @mysql_connect(self::mysql_hdb,self::mysql_udb,self::mysql_pdb)
    or die("数据库连接失败,请联系管理员!");
 @mysql_select_db(self::mysql_ddb,self::$cn)
 or die("数据库选择失败,请联系管理员!");

 @mysql_query("Set Names 'gb2312'");
}
}


// 分类信息类
class sort_info
{
/*
方法用途: 取得某分类的信息
参数设置: $post_kiss 分类亲缘树
返回值: 父分类SQL执行号
*/
static function sortinfo($post_kiss)
{
 $sql =  "select * from `".db::table_sort."`
    where `class_kiss`='$post_kiss'
    LIMIT 1";
 return $fs  =  @mysql_query($sql,db::$cn);
}
}



// 分类添加类
class sort_add
{
/*
方法用途: 添加根分类
参数设置: $post_name 分类名称
   $post_js 是否写入JS,默认0不写入,否则值为路径/文件名
返回值: 添加成功/失败
*/
function sort_add_base($post_name,$post_js=0)
{
 //取根分类class_base的最大值
 $sql =  "select max(`class_base`) as `class_base` from `".db::table_sort."`";
 $fs  =  @mysql_query($sql,db::$cn);
 $tmp =  @mysql_fetch_array($fs);
 $nub =  ++$tmp['class_base'];

 //插入新记录
 $sql =  "insert into `".db::table_sort."` values('', '$nub', '$nub', '0', '1', '$post_name')";
 if(@mysql_query($sql,db::$cn))
  $result = TRUE;
 else
  $result = FALSE;

 //插入JS文件
 if($result and $post_js!==0)
 {
  $js = new sort_show;
  $jsdata = $js->sort_js_text();

  if(sort_js_write::writejs($post_js,$jsdata))
   echo "js写入成功!";
  else
   echo "js写入失败!";
 }
 return $result;
}


/*
方法用途: 添加子分类
参数设置: $post_name 分类名称
   $post_kiss 上一层分类亲缘树
   $post_js 是否写入JS,默认0不写入,否则值为路径/文件名
返回值: 添加成功/失败
*/
function sort_add_son($post_kiss,$post_name,$post_js=0)
{
 $fs  =  sort_info::sortinfo($post_kiss);  // 查询父分类信息
 $tmp =  @mysql_fetch_array($fs);

 $class_base = $tmp['class_base'];    //取得根分类
 $class_tier = ++$tmp['class_tier'];    //取得当前分类所处层号

 $sql =  "select max(`class_son`) as `class_son`
    from `".db::table_sort."`
    where `class_kiss` LIKE '$post_kiss%' AND `class_tier`='$class_tier'";
 $fs  =  @mysql_query($sql,db::$cn);
 $tmp =  @mysql_fetch_array($fs);
 $class_son  = ++$tmp['class_son'];    //取得当前分类在子层的排列序号
 $post_kiss .=":".$class_son;     //取得当前分类的亲缘树序列

 //插入新记录
 $sql = "insert into `".db::table_sort."`
    values('', '$post_kiss', '$class_base', '$class_son', '$class_tier', '$post_name')";
 if(@mysql_query($sql,db::$cn))
  $result = TRUE;
 else
  $result = FALSE;

 //插入JS文件
 if($result and $post_js!==0)
 {
  $js = new sort_show;
  $jsdata = $js->sort_js_text();

  if(sort_js_write::writejs($post_js,$jsdata))
   echo "js写入成功!";
  else
   echo "js写入失败!";
 }
 return $result;
}
}




// 分类编辑类
class sort_ovr
{
/*
方法用途: 更新分类名称/批量移动目录(连带移动子目录)

参数设置: $post_kiss1 提交的该分类亲缘树
   $post_kiss2 提交的目标亲缘树(不移动分类则默认FALSE,移动到根值为字符串“base”)
   $post_name 提交的分类名(不更改则默认FALSE)
   $post_js 更新JS菜单 值为路径/文件名

返回值: 无
*/
public $post_kiss1; // 当前目录的亲缘树
public $post_kiss3; // 移至新位置的亲缘树
public $post_base; // 移至新位置的根
public $post_tier; // 移至新位置层(差)
public $off = 0; // 顺序执行操作开关
public $len;  // 当前亲缘树长度

function sortovr($post_kiss1 , $post_kiss2=FALSE , $post_name=FALSE , $post_js)
{

 $this->len = strlen($post_kiss1);
 $this->post_kiss1 = $post_kiss1;

 if($post_name !== FALSE)
 {
  $sql = "UPDATE ".db::table_sort." SET `class_name`='$post_name' WHERE `class_kiss`='$post_kiss1' LIMIT 1";
  if(@mysql_query($sql,db::$cn))
  {
   $this->off = 1;
   echo "分类名编辑成功!";
  }
  else
   echo "分类名编辑失败!";
 }

 if($post_kiss2 !== FALSE)
 {
  $fs  = sort_info::sortinfo($post_kiss1);    // 查询当前分类信息
  $tmp = @mysql_fetch_array($fs);
  $tier= $tmp['class_tier'];        // 当前层号

  // 移动到根时的处理
  if($post_kiss2 == "base")
  {
   $sql =  "select max(`class_base`) as `class_base` from `".db::table_sort."`";
   $fs  =  @mysql_query($sql,db::$cn);
   $tmp =  @mysql_fetch_array($fs);
   $this->post_base = ++$tmp['class_base'];   //最终根分类号
   $this->post_kiss3 = $tmp['class_base'];    //最终亲缘树
   $class_tier = 1;         //最终层号
   $class_son  = 0;         //最终子类排序号

  }
  // 不为根的处理
  else
  {
   $fs  = sort_info::sortinfo($post_kiss2);   // 查询目标分类信息
   $tmp = @mysql_fetch_array($fs);

   $this->post_base = $tmp['class_base'];    //最终根分类号
   $class_tier = ++$tmp['class_tier'];     //最终层号

   $sql =  "select max(`class_son`) as `class_son`
      from `".db::table_sort."`
      where `class_kiss` LIKE '$post_kiss2%' AND `class_tier`='$class_tier'";
   $fs  = @mysql_query($sql,db::$cn);
   $tmp = @mysql_fetch_array($fs);
   $class_son  = ++$tmp['class_son'];     //最终子类排序号
   $this->post_kiss3 = $post_kiss2.":".$class_son;  //最终亲缘树
  }

  $this->post_tier = $class_tier - $tier;     //层差值

  // 移动当前目录
  $sql = "UPDATE ".db::table_sort." SET
    `class_kiss`='$this->post_kiss3',
    `class_base`='$this->post_base',
    `class_son`='$class_son',
    `class_tier`='$class_tier'
     WHERE `class_kiss` = '$post_kiss1' LIMIT 1";

  if(@mysql_query($sql,db::$cn))
  {
   $this->off = 1;
   echo "目录移动成功!";
  }
  else
   echo "目录移动失败!";


  // 移动所有受影响子目录
  if($this->off == 1)
  {
   $sql = "UPDATE ".db::table_sort." SET
     `class_kiss`=INSERT(`class_kiss`,1,$this->len,'$this->post_kiss3'),
     `class_base`='$this->post_base',
     `class_tier`=`class_tier`+'$this->post_tier'
      WHERE `class_kiss` LIKE '$post_kiss1%'";

   if(@mysql_query($sql,db::$cn))
    echo "子分类移动成功!";
   else
   {
    $this->off = 0;
    echo "子分类移动失败!";
   }
  }
 }


 // 更新JS文件
 if($this->off == 1)
 {
  $js = new sort_show;
  $jsdata = $js->sort_js_text();
  if(sort_js_write::writejs($post_js,$jsdata))
   echo "js写入成功!";
  else
   echo "js写入失败!";
 }
}

/*
方法用途: 移动所有关联资源内容的目录指向(如内容表的记录对奴属目录的指向)

参数设置: $name_table  待修改的表名
   $name_sort  待修改的存储分类亲缘树的字段名
返回值: 无
*/
function textovr($name_table,$name_sort)
{
 if($this->off == 1)
 {
  $name_table = "`".$name_table."`";
  $name_sort  = "`".$name_sort."`";

  $sql = "UPDATE $name_table SET
    $name_sort=INSERT($name_sort,1,$this->len,'$this->post_kiss3')
     WHERE $name_sort LIKE '$this->post_kiss1%'";
  if(@mysql_query($sql,db::$cn))
   echo "资源目录指向移动成功!";
  else
   echo "资源目录指向移动失败!";
 }
}
}


// 分类显示类
class sort_show
{
/*
方法用途: 获取分类信息执行号
参数设置: $post_kiss 设置从某分类下开始显示(传入值应为上层分类的亲缘树序列),默认0为从根开始显示
   $post_wise 设置显示方式:1为显示该类的所有子分类,0为只显示当前层次的分类
返回值: sql执行号
*/

public $sqldata;
public $class_tier=1;  // 当前分类层号,用于格式输出时减去空格,1为减根

function __construct($post_kiss=0,$post_wise=1)
{
 if($post_kiss>0)
 {
  $fs  =  sort_info::sortinfo($post_kiss); // 取得父分类信息
  $tmp =  @mysql_fetch_array($fs);

  $this->class_tier = ++$tmp['class_tier'];   // 取得该分类的层号  
 
  $post_kiss = "`class_kiss` LIKE '$class_kiss%'";
  if($post_wise==0)
    $post_wise="'$this->class_tier' = `class_tier`";
   else
    $post_wise=" `class_tier` >= '$this->class_tier'";
 }
 else
 {
  $post_kiss=1;
  if($post_wise==0) $post_wise="`class_tier` = '1'";
 }

 $sql = "select * from `".db::table_sort."`
    where $post_kiss and $post_wise
    order by `class_base` asc, `class_kiss` asc, `class_son` asc";

 $this->sqldata  = @mysql_query($sql,db::$cn);
}


/*
方法用途: 列表显示分类
参数设置: $type 显示方式(默认0为不带格式输出,要带格式则参数为分级符号,如“└”)
返回值: 无
*/
function show($type)
{
 if($type=="0")
 {
  while($tmp = @mysql_fetch_array($this->sqldata))
  {
   echo $tmp['class_name']."
";
  }
 }
 else
 {
  while($tmp = @mysql_fetch_array($this->sqldata))
  {
   $nub=str_repeat(" ",($tmp['class_tier']-$this->class_tier))."$type"; //使用空格缩进和$type符号产生分级
   echo $nub.$tmp['class_name']."
";
  }
 }
}


/*
方法用途: 生成待写入js文本内容
返回值: 字符串
*/
function sort_js_text()
{
 while($tmp = @mysql_fetch_array($this->sqldata))
 {
  $nub=str_repeat(" ",$tmp['class_tier']); //使用空格缩进
  $jsdata .= $nub."[".--$tmp['class_tier'].","".$tmp['class_name']."","".$tmp['class_kiss'].""],".chr(13);
 }

 $jsdata = substr($jsdata, -strlen($jsdata), -2);    //去除最后一个逗号和最后一个换行
 return "var arrType=new Array(".chr(13).$jsdata.");";
}

}



// 导航信息类
class sort_boat
{
/*
方法用途: 输出某类别的所有上级目录(导航)
参数设置: $post_kiss 某类亲缘树
返回值: 无
*/
function boat_show($post_kiss)
{
 $class_kiss =explode(":",$post_kiss);  // 分拆亲缘树序列
 $nub = sizeof($class_kiss);     // 元素个数

 // 取得各层亲缘树序列数组
 for($i=0;$i<$nub;$i++)
 {
  if($i>=1) $kiss_val .= ":";
  $kiss_val  .= $class_kiss[$i];
  $kiss_arr[] = "'".$kiss_val."'=`class_kiss`";
 }
 
 // 生成sql查询条件
 $kiss_val = implode(" OR ",$kiss_arr);
 $sql = "select * from `".db::table_sort."`
    where $kiss_val order by `class_tier`";
 $fs  = @mysql_query($sql,db::$cn);
 while($tmp = @mysql_fetch_array($fs))
 {
  echo " >> ".$tmp['class_name'];
 }
}
}


// 写入JS文件类
class sort_js_write
{
/*
方法用途: 写入JS分类数据
参数设置: $fileurl 文件路径/文件名
   $filetext 写入内容
返回值: 成功/失败
*/
function writejs($fileurl,$filetext)
{
 $no = fopen($fileurl, 'w');
 $no = fwrite($no,$filetext);

 return ($no)?true:false;
}
}

?>



--------------------------------------------------------------------------------


添加分类演示:add_sort.php




无级分类(无递归) + 树状显示(多显示方式) +导航输出 +批量移动 + 无级联动 演示








     
       
     
     
       
     
     
       
     
     
       
     
     
       
     
   
添加分类:(如果选择了写入JS,则会更新级联菜单,但由于浏览器缓存的原因,你要重新开窗口才能看到!)    
位置:
   
名称:
       
       

写入到JS

 
     




include("sort_class.php");
new db;

// ---------- 添加分类调用 ------------
if(isset($_POST["post"]))
{
if($_POST["name"]!="")
{
  $add = new sort_add;
  if($_POST["js"]==1) $_POST["js"]="sort_type.js"; else $_POST["js"]=0;


  if($_POST["in_dId"] == "")
  {
   //if($add->sort_add_base("根分类名","是否写入JS/0为不写"))
   if($add->sort_add_base($_POST["name"],$_POST["js"]))
   echo "根分类添加成功";
  }
  else
  {
   //if($add->sort_add_son("父目录亲缘树","子分类名","是否写入JS"))
   if($add->sort_add_son($_POST["in_dId"],$_POST["name"],$_POST["js"]))
   echo "子分类添加成功";
  }
}
else
 echo "请输入分类名称!";
}



echo "
---------- 导航显示调用 ------------
";
$boat = new sort_boat;

$boat->boat_show("2:1:1:1");   //("某目录亲缘树,如:1:3:22:44");




echo "

---------- 显示分类调用 ------------
";
$show = new sort_show(0,1); //(某分类的亲缘树/0为根,显示包含子类1/显示当前层分类0)

$show->show("└ ");    //(分类前缀的符号,如不使用格式,则设置为0)

?>





--------------------------------------------------------------------------------


编辑分类演示:ovr_sort.php




无级分类(无递归) + 树状显示(多显示方式) +导航输出 +批量移动 + 无级联动 演示








     
       
     
     
       
     
       
     
     
       
     
     
       
     
     
       
     
     
       
     
   
分类编辑:
将分类:
           
移动至:
           

       确认移动分类? (移动分类将连带移动所有该目录的子分类,并且更新所有关联资源的目录指向,如文章信息的所属目录指向!建议在添加资源前设置好分类,一旦投入应用,虽本程序能够无损转移,但将耗费较大资源。若站点投入应用1年以上,建议不使用!)
名称修改为:
         
         (不改名称则不填写)        
强烈说明: 程序将自动更新JS级联菜单。切记:由于浏览器缓存的原因,你要重新开窗口才能看到!    如果你执行一次移动后没开新窗口刷新JS菜单,这时如果再执行转移操作,JS传入的值将是老数据,与当前库中的不一致,这将打乱所有数据库关联。哭吧!!

 
     




include("sort_class.php");
new db;

// ---------- 编辑分类调用 ------------
if(isset($_POST["post"]))
{
if($_POST["in_dId"]!="")
{
  if($_POST["name"]=="") $_POST["name"]=FALSE;
  if($_POST["no"]==1)
  {
   if($_POST["in_dId1"]=="") $_POST["in_dId1"]="base";
  }
  else
   $_POST["in_dId1"]=FALSE;

  $ovr = new sort_ovr;
  //参数("待修改分类/不更改值为FALSE","新位置/base表根/不更改值为FALSE","新类名/不更改值为FALSE","更新JS菜单")
  $ovr->sortovr($_POST["in_dId"] , $_POST["in_dId1"] , $_POST["name"] , "sort_type.js");



  /*
   如果对目录进行了批量移动,不要忘了执行下边这句:转移受影响的内容奴属目录指向。
   没有把它直接写到目录移动后就自动执行,是因为有些系统可能不止一个表使用目录库,因此在下边手动指定要改哪些表!
  */

  // $ovr->textovr("表1","关联目录字段名");
  // $ovr->textovr("表2","关联目录字段名");
  // .... 有多少表使用了就执行多少次


}
else
 echo "未指定待编辑分类!";
}



echo "
---------- 导航显示调用 ------------
";
$boat = new sort_boat;

$boat->boat_show("2:1:1:1");   //("某目录亲缘树,如:1:3:22:44");




echo "

---------- 显示分类调用 ------------
";
$show = new sort_show(0,1); //(某分类的亲缘树/0为根,显示包含子类1/显示当前层分类0)

$show->show("└ ");    //(分类前缀的符号,如不使用格式,则设置为0)

?>


Feb 10

这个东西看完了感觉不错

是繁体的,我想没多少人不会看繁体吧

至少我身边的朋友都会

下载

Feb 6
function getHeader($content)
{
$array = preg_split("/(\r\n?)/", $content, 2);
if (!isset($array[1])) $array[1] = null;
return $array;
}

//$url 要读取的地址,$allowExts 如果有跳转,允许跳转后的扩展名
function read($url, $allowExts, $header = true)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, $header);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_USERAGENT, "PHP WORLD Spider - WWW.PHPWORLD.CN");

if ($header == true)
{
 $m = getHeader(curl_exec($ch));
}
else
{
 $content = curl_exec($ch);
 curl_close($ch);
 return $content;
}


//截取内容
$header = $m[0];
$body = $m[1];

if (preg_match("/\nlocation:(.+)/", $header, $ar))
{
 $url = trim($ar[1]);
 $infos = @pathinfo(basename($url));
 if (isset($infos["extension"]) && in_array(strtolower($infos["extension"]), $allowExts))
 {
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_HEADER, $header);
  $content = curl_exec($ch);
  curl_close($ch);
  return $content;
 }
}

return $body;
}

echo read("http://www.test.com/a.php", array("php"));

Feb 6

CURL 是 Client URL Library Functions 的缩写,由 Daniel Stenberg 创建,更多内容可以参考他的网站。最近几天突然对 HTTP 采集有了兴趣。之前我在做这方面程序,一般通过两种方法,一个是利用 PHP 自身的文件操作函数。PHP 的 fopen,readfile 都是可以支持 http 协议的,这样可以很方便的获取互联网上的内容。另一种方法是通过 PHP 的 Socket 函数,这个方法的好处是对各种协议都可以支持,缺点是使用起来比较麻烦,要对协议有一定的了解。在 HTTP 获取方面,运用 Socket 的 Snoopy 类是一个非常好用的 PHP HTTP 客户端,也是我原来最常用的方法。

随便翻翻 PHP 手册就会发现,PHP 本身可以支持 libcurl。用 C/C++ 写成的 libcurl 相比 Snoopy 更快速更可靠,而且除了 HTTP 协议外,还广泛支持其他协议( https, ftp, ladp 等等)。libcurl 并不是 PHP 默认加载的模块,具体如何启用可以参考 PHP 手册,这里就不多说了。PHP libcurl 使用非常简单,例如:


<?php
$ch = curl_init("http://www.php.net");
curl_exec($ch);
curl_close($ch);
?>

三行简单的程序就可以完成对 http://www.php.net 页面的读取并输出。当然更多的用法可以参考 PHP 手册。这里只说说我在写程序时遇到的一个问题,例如下面的程序:


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 1); //不读取页面内容
curl_exec($ch); //执行 (1)
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 0); //读取页面内容
curl_exec($ch); //执行 (2)
curl_close($ch);
?>

按照我的想法,程序应该可以分别返回 HTTP 响应报头和页面的内容。可是上面这段程序执行结果为:(1)处正常返回 HTTP 响应报头,(2)不会返回任何内容。查了很多资料都没有提到这个问题。最终无奈,只好在读取(2)之前重新执行 curl_init(),即将上程序改成这样:


<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 1); //返回内容中包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 1); //不读取页面内容
curl_exec($ch); //执行 (1)
curl_close($ch);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.php.net"); //指定读取 php.net
curl_setopt($ch, CURLOPT_HEADER, 0); //返回内容中不包含 HTTP 头
curl_setopt($ch, CURLOPT_NOBODY, 0); //读取页面内容
curl_exec($ch); //执行 (2)
curl_close($ch);
?>

返回结果正常。虽然可以通过这种方法解决问题,但对这个现象我感觉非常的奇怪。是 libcurl 本身的问题,还是我使用的方法不当呢?还希望熟悉 curl 的朋友帮忙指正一下。

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

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

   ·CURL方式

   ·SOCKET方式

   ·PHP5中的SOAP方式

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

  CURL方式

  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();
?>

  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=’urn:xmethods-delayed-quotes’
encodingStyle=’http://schemas.xmlsoap.org/soap/encoding/’/>
</output>
</operation>
</binding>

<service name=’StockQuoteService’>
<port name=’StockQuotePort’ binding=’StockQuoteBinding’>
<soap:address location=’http://192.168.3.9/php5/server.php’/>
</port>
</service>
</definitions>

client.php

<?php
$client = new SoapClient("stockquote.wsdl");
$result = $client->getQuote("nde005");
print_r($result);
?>
分页: 103/118 第一页 上页 98 99 100 101 102 103 104 105 106 107 下页 最后页 [ 显示模式: 摘要 | 列表 ]