PHP标头与require冲突

时间:2014-05-08 10:07:33

标签: php paypal

我正在尝试将PayPal集成到我的网站中,但在按下PayPal按钮后会出现此错误:

Warning: Cannot modify header information - headers already sent by (output started at X:\home\test\www\view\main.php:29) in X:\home\test\www\view\frontend\paypalfunctions.php on line 377

负责该错误的main.php部分是:

<div class="container">
        <?php require 'view/frontend/'.$tpl.'.php';?>
</div>

这行代码对我整个网站的运作至关重要。它与PayPal的paypalfunctions.php:

中的这一特定功能相冲突
function RedirectToPayPal ( $token )
{
global $PAYPAL_URL;

// Redirect to paypal.com here
$payPalURL = $PAYPAL_URL . $token;
header("Location: ".$payPalURL);
exit;
}

我仔细阅读了this question关于这个问题并尝试了一些事情,但没有找到解决方案。我需要在代码中更改它才能工作吗?

2 个答案:

答案 0 :(得分:2)

问题是,您的视图正在输出内容和标题。

解决方案是使用ob_start和ob_get_contents()缓冲输出。 这将停止视图文件中的所有直接输出。 然后,您可以在需要时输出缓冲区。 在通过标题进行paypal重定向之前,不需要查看输出。

所以逻辑是:渲染视图缓冲区或执行标题重定向。

答案 1 :(得分:1)

ob_start是一种解决方法。我更喜欢解决实际问题。它通常是一个空白问题。

尝试调整以下内容......

<div class="container">
        <?php require 'view/frontend/'.$tpl.'.php';?>
</div>

<div class="container">
<?php require 'view/frontend/'.$tpl.'.php';?>
</div>

看看是否有帮助。另外,请确保您在附带的文件中没有任何额外的空白区域。