我相信这是一个PHP错误,但我不是百分百肯定。基本上,我正在尝试为我的网络杂志构建一个应用程序,并已经完成了静态内容,这很好。然后我转换为PHP并尝试包含PHP Facebook SDK。我使用了正确的App ID和Secret。
这是我在index.php文件开头使用的代码。
<?php
require 'fb/facebook.php';
$fbconfig['appUrl'] = "http://apps.facebook.com/dailydischord/";
// create instance of the Facebook application
$facebook = new Facebook(array(
'appId' => '<appid>',
'secret' => '<appsecret>',
'cookies' => 'true',
));
// get the id of the user using the app
$user = $facebook->getUser();
if($user) {
try {
//if user is authentic, proceed
$user_profile = $facebook->api('/me');
}
catch(FacebookApiException $e) {
error_log($e);
$user = null;
}
}
// if user is authentic, generate logout URL
if($user) {
$logoutUrl = $facebook->getLogoutUrl();
?>
<!DOCTYPE HTML>
<html>....
然后我在内容完成后继续这样做。
<?php
} else {
$loginUrl = $facebook->getLoginUrl();
}
?>
我确实得到了一个错误,我不再得到,这很奇怪。就是这样的。
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started...
该应用的网址位于:http://apps.facebook.com/dailydischord/
非常感谢任何帮助。如果我错过了什么,请问我,我会尝试提供更多见解。
答案 0 :(得分:1)
您正在尝试发送(会话)标题,而它们已经发送。
可能在<?php
之前有换行符。如果没有,请尝试将session_start()放在代码的开头(<?php
之后的第一行)。如果这也不起作用,请将ob_start()放在代码的开头(它很脏,但它会起作用)。
答案 1 :(得分:1)
您正在尝试输出标头,在本例中为会话。标题是浏览器处理的第一件事。如果要在输出HTML后更改此设置,则会出现此错误。
在输出数据后,最好不要更改标题,也可以使用以下行并将其放在代码的顶部:
ob_start();
请注意,使用它不是一个正确的修复,但它会打开输出缓冲(允许您在已经放置HTML代码时更改标头)。
以下是可选的但是正确,使用ob_start()函数并且完全在输出的末尾你必须关闭缓冲并输出缓冲区中的内容。
ob_end_flush();
有关详细信息,我会告诉您转到PHP documentation页面。
答案 2 :(得分:0)
由于输出完全空白,因此表示语法错误或失败require
。您是否可以访问Web服务器错误日志?它可能会告诉你确切的问题。要快速检查,您可以将require
更改为include
,看看您是否获得任何输出(即使它只是屏幕上的错误消息)。
答案 3 :(得分:0)
我设法自己修复了这个问题。似乎最后一点代码是问题(“else”语句)。这是我使用的代码。
<?php
} else {
$loginUrl = $facebook->getLoginUrl(array('redirect_uri' => $fbconfig['appUrl']));
print "<script type='text/javascript'>top.location.href = '$loginUrl';</script>";
}
?>