2015-09-28 78 views
2

我正在从MLS RETS服务器下载属性图像。当我使用GetObject方法下载属性图像时,有时Getobject方法不会返回成功参数,则图像不会在本地服务器上下载。有任何解决方案吗?MLS RETS服务器

这里是我的代码:

$photos = $rets->GetObject("Property", "Photo", $idata['propertymlsid'], "*", 0);   
    foreach ($photos as $photo) 
    { 

     $imgval=""; 
     $imgval="{$photo['Content-ID']}-{$photo['Object-ID']}.jpg"; 
     if ($photo['Success'] == true) 
     { 
     @file_put_contents("photos/{$photo['Content-ID']}-{$photo['Object-ID']}.jpg", $photo['Data']); 
     @mysql_query("insert into tableName (pro_mlsid,photos_name,image_date)values('".$idata['propertymlsid']."','".$imgval."','".date('Y-m-d h:i:s')."')"); 
     }else 
     { 
     // in this section i want to download image. please suggest what to do here? . i have record for this image in database for but could not download it. 
     } 

    } 

请通过代码。我想在上面的代码的其他部分下载图像。

+0

请发布您的代码 –

+0

看起来您的GetObject查询是正确的。如果Photo ['Success']为true,则只能下载该照片。如果为false,则会转到else块。在这种情况下,您可能需要从$ photo ['ReplyCode']记录错误代码。请参阅文档:https://github.com/troydavisson/PHRETS/wiki/GetObject –

回答

2

不幸的是,RETS协议并不适用于处理图像,整个过程中还存在很多缺陷。

  1. 当删除数据库中的项目时,RETS协议无法反映该更改。对于列表这是一个非常罕见的事件,但不是图像。无论哪种方式,都只有一个错误,即请求的对象没有找到或不存在。换句话说,您必须假定该对象已被删除,并且您必须更新自己的记录。

  2. 图像经常被代理更新,可能已被删除或更改顺序。

  3. 图像下载过程是双重的。 a)您必须首先获取元数据记录,然后b)使用GetObject的图像本身。但是,与此同时,代理可能已删除图像。

  4. 根据从哪里获取数据,可能会在两个事件之间产生大量延迟。例如,IDX通常是辅助数据库,而不是从MLS本身访问RETS馈送。

因此,底线你的代码可能是好的,但所请求的图像实际上已被删除,因为你请求该图像的元数据。

如果您的过程总体上有效,并且缺少图像,它可能会很好地消失。理论上你应该运行第二个进程并尝试获取实际的元数据。如果没有回报,那么您可以放心地假设该图像的记录已经消失。

+0

但是你有时说它不会成功?它多久工作一次? –

1

一些房地产委员会允许代理上传损坏的照片,甚至无效的文件(如PDF文件)。房地产经纪人犯的这些错误错误地更新了RETS订阅源,以指示存在有效的照片,但是当您尝试下载它时,它会失败。

只需删除您的else声明。

+0

谢谢你的宝贵回应! –