在使用file_get_contents()时获得错误MSG


getting an error msg while using file_get_contents()

我收到了这样的警告消息

警告:file_get_contents() [function。File-get-contents]: stream不支持查找

这是代码

$f=file_get_contents('https://api.facebook.com/method/stream.publish?message='.$facebook_message1[0].'%20'.$facebook_message1[1].'%20'.$facebook_message1[2].'%20'.$facebook_message1[3].'%20'.$facebook_message1[4].'%20'.$facebook_message1[5].'%20'.$facebook_message1[6].'%20'.$facebook_message1[7].'%20'.$facebook_message1[8].'%20'.$facebook_message1[9].'%20'.$facebook_message1[10].'%20'.$facebook_message1[11].'%20'.$facebook_message1[12].'%20'.$facebook_message1[13].'%20'.$facebook_message1[14].'%20'.$facebook_message1[15].'%20'.$facebook_message1[16].'%20'.$facebook_message1[17].'%20'.$facebook_message1[18].'%20'.$facebook_message1[19].'%20'.$facebook_message1[20].'&attachment={"name":"'.$url.'","href":"'.$url.'","caption":"","description":"","media":[{"type":"image","src":"'.$facebook_image.'","href":"'.$cat.'"}]}&uid='.$user_id.'&access_token='.$access_token.'', NULL, NULL, 246);
$fID = substr_replace($f,"",-27);

您的直接问题是您正在使用file_get_contents的第四个参数。您应该简单地省略它,然后用substr截断$f的相关部分,如下所示:

$f = substr($f, 246);

然而,还有许多其他问题:

  1. $facebook_message的处理是残暴的。保存你的理智,使用implode('%20', $facebook_message)代替手动字符串连接。
  2. 在你的代码中使用神奇的数字246-27是一个非常糟糕的主意。你是如何产生这些值的?显然,它们指的是用某些东西分隔的结果字符串的一部分,因此通过编写查找分隔符的代码来记录它。如果facebook对返回值格式做了任何微小的改变,即使这种改变纯粹是技术上的,从语义的角度来看没有什么不同,你现在的代码也会崩溃。

您已经告诉file_get_contents用最后一个参数寻求偏移246—您不能对HTTP url这样做。您需要获取整个响应,然后使用

$f = substr($f, 246);

提取246之后的部分