协助头重定向问题

时间:2013-10-04 09:24:11

标签: php

现在有一段时间真的出了问题而且无法弄明白。 基本上下面的代码是函数的一部分,我检查并且没有输出打印到浏览器:

    case 'Failed': // if it fails...
        switch ( $unencrypted_values['Status'] ) {
            case 'NOTAUTHED':
            case 'REJECTED':
            case 'MALFORMED':
            case 'INVALID':
            case 'ABORT':
            case 'ERROR':
                $purchase_log = new WPSC_Purchase_Log( $unencrypted_values['VendorTxCode'], 'sessionid' );
                $purchase_log->set( array(
                    'processed'  => WPSC_Purchase_Log::INCOMPLETE_SALE,
                    'notes'      => 'SagePay Status: ' . $unencrypted_values['Status'],
                ) );
                $purchase_log->save();
                // if it fails redirect to the shopping cart page with the error
                // redirect to checkout page with an error
                $error_messages = wpsc_get_customer_meta( 'checkout_misc_error_messages' );
                if ( ! is_array( $error_messages ) )
                    $error_messages = array();
                $error_messages[] = '<strong style="color:red">' . $unencrypted_values['StatusDetail'] . ' </strong>';
                wpsc_update_customer_meta( 'checkout_misc_error_messages', $error_messages );
                $checkout_page_url = get_option( 'shopping_cart_url' );
                if ( $checkout_page_url ) {
                    header('Location: '.$checkout_page_url );
                  exit();
                }
                break;
        }
        break;

这是函数的一部分,但当我运行我的脚本时,我收到错误消息:

Warning: Cannot modify header information - headers already sent by (output started at       /home/******/public_html/wp-content/themes/reallywildflowers/header.php:13) in      /home/reallyw/public_html/wp-content/plugins/myplugin/merchants/sagepay.php on line 598 - See more at: http://website.com/products-page/transaction-results/?crypt=NzsPDC0yayoLATltUScRGBA6HTw9NTcCJXMqezgmMVkJKh0LOSYzSy4rBVwFFREcAG8MAXgSPwY8IgpNGAZDLwEhChcqFS4oJioOBEZFUkhXd15Ab3ZiX31oPWkkIB0wAHIVT2B3YCl8d1sUQURXSUl7LzpgbBdTDwpGCkA1XUAlCVtObnBlFm8PBlYCGhFEUHxATX4AADgKGFkENjgpWSkOOjsQZxcPLTwOSgQmAAoRIxpFFQACKAELLx8nGxYNJyAKHQokJR4lOlZ0NiAmMSELSDsOcwQOOjsHTUo5JC0nBys8fgY/DT0PAl1KRENKIBwLGy0zMzg9Lx9MBEkqMkIMLy4OfBslHhg8ekM8LTUtfyc6GXBmPR15L3pRNwQLABsXCD18ACIaD011FgcRTSAmCREsMmtcfX5Z

第598行是代码中的第一行:

header('Location: '.$checkout_page_url );

3 个答案:

答案 0 :(得分:0)

如果在重定向之前打印了某些内容,通常会出现此错误。

解决问题的最简单方法是

如果您有权更改php.ini配置文件,则可以查找并更改或添加以下内容

output_buffering = On

或致电

ob_start()
重定向前

有几个SO帖子描述了这个问题,当我在招聘时评估一个php开发人员时,我经常会问这个问题:)

Headers already Sent

希望这会有所帮助

答案 1 :(得分:0)

检查文件在脚本开头是否有空格。

下面的尝试可以提供帮助,

ob_start();
header('Location: '.$checkout_page_url );
ob_flush();

答案 2 :(得分:0)

致电ob_start();或将@置于session_start @session_start

替代解决方案是

<script type="text/javascript">
window.location.href = '<?php echo $checkout_page_url; ?>';
</script>