我的网页使用PHP执行FQL请求,获取登录用户的朋友数,这是代码:
$graph = 'https://graph.facebook.com/fql?q=';
$graph .= 'SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29';
$graph .= '&access_token=' . $access_token;
$result = file_get_contents($graph);
大约80%的时间都可以正常工作,但有时我会得到400 Bad Request。我注意到这似乎是由于将'q'与'access_token'分开的&符号被转义而引起的;即我得到这个(不起作用):
https://graph.facebook.com/fql?q=SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29&access_token=AAAF8VR3YZCpQBAGiX16jvZAwaEciTwZB1QZAaUjcjy82Ce7Ov7nPqNxjsKM1SAZASGVcZCJ80R9KJZBJYrjKmsDVK6YNrPGA7plPVuwCFZCaOwZDZD
而不是这个(工作 - 相同的请求,但'& amp;'已被'&'替换):
https://graph.facebook.com/fql?q=SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29&access_token=AAAF8VR3YZCpQBAGiX16jvZAwaEciTwZB1QZAaUjcjy82Ce7Ov7nPqNxjsKM1SAZASGVcZCJ80R9KJZBJYrjKmsDVK6YNrPGA7plPVuwCFZCaOwZDZD
我尝试相应地调整我的代码,以便PHP显式地告诉字符串替换转义的&符号,但无济于事:
$graph = 'https://graph.facebook.com/fql?q=';
$graph .= 'SELECT+friend_count+FROM+user+WHERE+uid%3Dme%28%29';
$graph .= '&access_token=' . $access_token;
$result = file_get_contents($graph);
$graphNoEscape = str_replace('&', '&', $graph);
$result = file_get_contents($graphNoEscape);
有人知道问题的解决方案吗?令人讨厌的是,这段代码有时会起作用,但并非总是如此!
答案 0 :(得分:2)
对于任何发现此问题但遇到同样问题的人来说,这就是我解决问题的方法:
首先,我告诉服务器在public_html / www文件夹中使用一个php.ini,PHP版本为5.3。
然后我按如下方式编辑了我的代码:
$graph = 'https://graph.facebook.com/fql?q=';
$graph .= urlencode('SELECT friend_count FROM user WHERE uid = me()');
$graph .= '&access_token='.$access_token;
$graphNoEscape = str_replace('&', '&', $graph);
$file_contents = file_get_contents($graphNoEscape);
$fql_result = json_decode($file_contents);
$friend_count = mysql_real_escape_string($fql_result->data[0]->friend_count);
不可否认,我可能已经使用str_replace()完成了它,但它可以正常工作:)
希望这可以帮助某人。