PHP跨服务器下载、更新、删除文件

法子 发布于 2013/12/02 18:47
阅读 1K+
收藏 1
PHP

      现在有两台服务器,分别标记为A、B,A服务器上传新图片的时候,B也能把新图片从A中拷贝过来。这一功能已经实现,如下为文件部署:

      假如A上传新图片的文件upload.php有包含有如下代码

      include('http://www.xxx.com/copy-image.php?name='.$name);

      $name就是upload.php上传的新图片的名称,把它传给B的copy-image.php文件。copy-image.php代码如下:

      $file_name = $_GET['name']; 

      $url = 'http://www.yyy.com/images/'.$file_name;   //A存放图片路径
      $path = 'images/';   //B存放图片路径

      if(@!fopen( $url, 'r' ) ){
          return false;
      }

      if($url == '') {
          return false;
      }
      $ext_name = strrchr($url, '.');
      if($ext_name != '.gif' && $ext_name != '.jpg' && $ext_name != '.bmp' && $ext_name != '.png') {
          return false;
      }
      $filename = strrchr($url, '/');

      ob_start();
      readfile($url);
      $img_data = ob_get_contents();
      ob_end_clean();
      $local_file = fopen($path.$filename , 'a');
      fwrite($local_file, $img_data);

     这样,A上传的新图片就可以同步到B上了。

     然后,我还想要添加这样的功能:当A的图片要更新一张图片时,同时更新B中对应的图片。假如A更新图片的方式为:先把要更新的图片删除,然后上传一张同名的新图片。我的想法是这样的,即在B中的copy-image.php文件接收到图片的name值时,先检测B中有没有此图片,如果有,则先把它删除,再把新图片拷贝过来,删除B中图片代码如下:

     if(file_exists($file_name)){    //检测图片是否存在,如果存在,先把它删除
         unlink($file_name);

     }

     则copy-image.php文件完整代码如下:

      $file_name = $_GET['name']; 

      if(file_exists($file_name)){    //检测图片是否存在,如果存在,先把它删除
          unlink($file_name);

      }

      $url = 'http://www.yyy.com/images/'.$file_name;   //A存放图片路径
      $path = 'images/';   //B存放图片路径

      if(@!fopen( $url, 'r' ) ){ 
          return false;
      }

      if($url == '') {
          return false;
      }
      $ext_name = strrchr($url, '.');
      if($ext_name != '.gif' && $ext_name != '.jpg' && $ext_name != '.bmp' && $ext_name != '.png') {
          return false;
      }
      $filename = strrchr($url, '/');

      ob_start();
      readfile($url);
      $img_data = ob_get_contents();
      ob_end_clean();
      $local_file = fopen($path.$filename , 'a');
      fwrite($local_file, $img_data);

     运行程序之后,图片没有删除!所以,我想问大家,是什么原因造成图片删除不成功呢?是不够权限吗?或者,无法跨域删除图片?恳求各位留下意见和建议,谢谢!

加载中
0
huzorro
huzorro
不用搞这么复杂 NFS让你这个需求无需写任何代码
0
justintung
justintung
file_exists要“完整路径,和你的fopen一样
justintung
justintung
回复 @小甘童鞋 : unlink也要“完整路径”啊
法子
法子
我加上完整的图片网址也不行呢
返回顶部
顶部