Php Facebook应用程序中的致命错误:对非对象调用成员函数getLongLivedSession()

Php Facebook应用程序中的致命错误:对非对象调用成员函数getLongLivedSession(),php,curl,facebook-javascript-sdk,Php,Curl,Facebook Javascript Sdk,我有一个PHP脚本,可以在用户的Facebook页面上发布内容。这是通过Facebook应用程序实现的 当我单击“授权”时,它会加载10秒钟,不会发布,并显示一个空白页面,其中包含以下错误: exception Failed to connect to 2a03:2880:f01f:2:face:b00c:0:2: Network is unreachable Fatal error: Call to a member function getLongLivedSession() on a n

我有一个PHP脚本,可以在用户的Facebook页面上发布内容。这是通过Facebook应用程序实现的

当我单击“授权”时,它会加载10秒钟,不会发布,并显示一个空白页面,其中包含以下错误:

exception Failed to connect to 2a03:2880:f01f:2:face:b00c:0:2: Network is  unreachable Fatal error: Call to a member function getLongLivedSession() on a non-object in /var/zpanel/hostdata/zadmin/public_html/mysite/thirdparty/networks/facebook/Facebook.php on line 92

直到一周前,一切都很顺利,但今天我还是继续犯这个错误。出现此问题的原因是什么?

许多服务器启用了IPv6,但它没有路由,实际上无法工作。当您尝试访问已准备好IPv6的站点时,这将成为一个主要问题。默认情况下,curl将尝试通过IPv6连接,并将超时。通过IPv4,只有添加以下内容,它才能正常工作:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
如果在
文件获取内容()
获取标题()
等方面遇到此问题,可以在
/etc/sysctl.conf
中添加以下行:

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1 

根据您的评论更新: 在freebsd 9中禁用ipv6

/etc/rc.conf


ipv6_network_interfaces="none" # Default is auto

ipv6_activate_all_interfaces="NO" # this is the default

ip6addrctl_enable="NO" # New way to disable IPv6 support

ip6addrctl_policy="ipv4_prefer" # Use IPv4 instead of IPv6

ipv6_activate_all_interfaces="NO" # Do not automatically add IPv6 addresses

我也有问题。当我使用IPv6地址时。也许一周前你还有一个IPv4地址?我会尝试强制curl只使用IPv4。谢谢你的意见!从今天早上开始就有同样的问题。这来自一个使用Facebook方法的独立PHP脚本,因此实际上不可能使用curl_setopt。是否有全局php.ini设置?PS:并不是所有的请求都会失败。@AlainZelink:恐怕你必须修改脚本本身。(我们是在谈论旧的Facebook PHP SDK v3还是其他什么?)但一般来说,这是一个网络配置问题,因此应该进行调查和修复,而不是强迫cURL“降级”到IPv4。您可以尝试使用IPv4而不是IPv6吗?谢谢。我以前见过这个答案。我正在运行FreeBSD,所以这个配置不适合我。我将检查如何为FreeBSD全局禁用它,并试一试。curl_setopt不是一个选项,因为我使用的是Facebook方法。如果您使用的是Facebook方法,请使用最后一个选项(在freebsd 9中禁用ipv6)。您好。我更改了rc.conf&重新启动,但仍然有错误。我查看了rc.conf的手册页,似乎一切正常。也许有一个选择遗漏了。顺便说一句,ipv6_激活_所有_接口在您的注释中指定了两次。我正在运行FreeBSD9.2。
/etc/rc.conf


ipv6_network_interfaces="none" # Default is auto

ipv6_activate_all_interfaces="NO" # this is the default

ip6addrctl_enable="NO" # New way to disable IPv6 support

ip6addrctl_policy="ipv4_prefer" # Use IPv4 instead of IPv6

ipv6_activate_all_interfaces="NO" # Do not automatically add IPv6 addresses