Неустранимая ошибка в приложении Facebook: вызов функции-члена getLongLivedSession() для не-объекта

У меня есть PHP script, который размещает контент на странице 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

Все работало отлично до недели назад, но сегодня я продолжаю получать эту ошибку. В чем причина этой проблемы?

Ответы

Ответ 1

Многие серверы имеют IPv6, но его не маршрутизируют, и он фактически не работает. Это становится серьезной проблемой, когда вы пытаетесь получить доступ к сайту, готовому к IPv6. По умолчанию curl попытается подключиться через IPv6 и будет тайм-аут. Через IPv4 он может работать нормально, только если вы добавите это:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );

Если вы столкнулись с этой проблемой с file_get_contents(), get_headers() и т.д., вы можете добавить следующие строки в /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 

или

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6

Обновление по вашим комментариям:

Отключить ipv6 в freebsd 9

/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