如何通过PHP无缝迁移原有项目到新服务

  介绍

本篇内容介绍了”如何通过PHP无缝迁移原有项目到新服务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

出于性能和安全方面的考虑,公司的平台上禁用了本地文件读写和对外的数据抓取。相应的,我们提供了对应的服务来做同样的事情。新服务的接口和原来不太一样。

专门为我们平台开发的程序当然不会存在问题,但是有大量的已有的程序和开源项目,就面临着繁杂的迁移工作。

<强>包装

其实从PHP4.3开始,PHP就支持包装了,这意味着用户可以自定义和重载协议。

只需要使用<代码> stream_wrapper_register 函数就可以注册一个协议,对这个协议的相关操作,PHP都会回调相关的函数。

手册上给了一个例子。它注册了一个叫var的协议,然后对这个协议操作都会回调<代码> 里VariableStream类边定义的方法。

 varname =, $ url (“host");=$ this→position  0;
  return 真实;
  }
  
  function  stream_read(美元数)
  {
  美元$ ret =, substr(全局变量($ this→varname],,这→美元地位,,美元数);
  +=$ this→position  strlen (ret);
  return 随著美元;
  }
  
  function  stream_write(元数据)
  {
  美元$ left =, substr(全局变量($ this→varname],, 0,, $ this→位置);
  美元$ right =, substr(全局变量($ this→varname],, $ this→position  +, strlen(元数据));
  美元的全局变量($ this→varname],=, left 美元;只data 美元;只对美元;
  +=$ this→position  strlen(元数据);
  return  strlen(元数据);
  }
  
  function  stream_tell ()
  {
  return 这→美元地位;
  }
  
  function  stream_eof ()
  {
  return 这→美元position 祝辞=,strlen(全局美元($ this→varname]);
  }
  
  function  stream_seek(抵消美元,,那里)
  
  {
  
  switch (那里),{
  
  case  SEEK_SET:
  
  if  (offset 美元;& lt;, strlen(全局美元($ this→varname]),,,, offset 美元;祝辞=,0),{=$ this→position 抵消美元;
  
  return 真实;
  
  },{else 
  
  return 假;
  
  }
  
  打破;
  
  case  SEEK_CUR:
  
  if  (offset 美元;祝辞=,0),{
  
  +=$ this→position 抵消美元;
  
  return 真实;
  
  },{else 
  
  return 假;
  
  }
  
  打破;
  
  case  SEEK_END:
  
  美元if  (strlen(全局变量($ this→varname]), +, offset 美元;祝辞=,0),{=$ this→position  strlen(全局美元($ this→varname]), +,抵消美元;
  
  return 真实;
  
  },{else 
  
  return 假;
  
  }
  
  打破;
  
  默认值:
  
  return 假;
  
  }
  
  }
  
  }
  
  stream_wrapper_register (“var",,“VariableStream")
  
  或死亡(“Failed 用register  protocol");
  
  $ myvar =,““
  
  $ fp =, fopen (“var://myvar",,“r +“);
  
  写入文件(fp美元,“line1 \ n");
  
  写入文件(fp美元,“么\ n");
  
  写入文件(fp美元,“line3 \ n");
  
  倒带(fp);
  
  while  (! feof (fp)美元),{
  
  美元echo  fgets (fp);
  
  }
  
  文件关闭(fp);
  
  var_dump ($ myvar);
  
  ?在

回调课里边能实现的接口列表在这里:http://cn2.php.net/manual/en/class.streamwrapper.php

<强>需要注意的一些问题

<强>构造函数

首先是,<代码>包装类> 了。而当你的操作触发和流无关的函数时,比如file_exists会触发url_stat方法,这个时候构造函数是不会被调用的。

<强>读实现

包装里边有地位和追求等概念,但是很多服务其实是一次性就读取全部数据的,这个可以在<代码> stream_open>

<>强url_stat的实现

在包装类的实现中,url_stat的实现是个难点。必须正确的实现url_stat才能使

如何通过PHP无缝迁移原有项目到新服务