如何修复Zend中的“无法发送标头; 标头已经发送”错误?

12

可能是重复的问题:
由 PHP 已发送头信息

我刚开始学习 Zend,尝试使用 Zend 创建一个包含两个字段的简单表单。当我点击提交按钮时,出现以下错误:

Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in D:\xampp\htdocs\study\quickstart\application\controllers\EmployeeController.php, line 35' in D:\xampp\php\PEAR\Zend\Controller\Response\Abstract.php:282 Stack trace: #0 D:\xampp\php\PEAR\Zend\Controller\Response\Abstract.php(300): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 D:\xampp\php\PEAR\Zend\Controller\Response\Abstract.php(727): Zend_Controller_Response_Abstract->sendHeaders() #2 D:\xampp\php\PEAR\Zend\Controller\Front.php(984): Zend_Controller_Response_Abstract->sendResponse() #3 D:\xampp\php\PEAR\Zend\Application\Bootstrap\Bootstrap.php(77): Zend_Controller_Front->dispatch() #4 D:\xampp\php\PEAR\Zend\Application.php(358): Zend_Application_Bootstrap_Bootstrap->run() #5 D:\xampp\htdocs\study\quickstart\public\index.php(25): Zend_Application->run() #6 {main} thrown in D:\xampp\php\PEAR\Zend\Controller\Response\Abstract.php  on line 282

我查看了以下链接:zend header already send problem

我已经删除了所有文件中的空格并添加了关闭标签,但仍然遇到相同的错误。

如何修复此错误?

以下是 EmployeeController.php 的内容:

<?php 
class EmployeeController extends Zend_Controller_Action
{
    public function init()
    {

    }
    public function indexAction()
    {

      $form = new Default_Form_Empdetails();
       $this->view->form = $form;
        $request = $this->getRequest();
          $formData = $request->getPost();
        if ($request->isPost()) {
            if ($form->isValid($request->getPost())) {  
                $empName = $form->getValue('empName');
                $empAddress = $form->getValue('empAddress');
                $emp = new Default_Model_DBTable_Employee();
                $emp->addAlbum($empName, $empAddress);
              $this->_helper->redirector('index');
            } else {
                $form->populate($formData);
            }
        }

    }
}
?>

请帮助我


EmployeeController.php文件的第35行是什么? - rahim asgari
1
在所有文件中删除 PHP 结束标签(?>)后面的空格。 - Naveed
@NAVEED 是的,移除后可以工作。谢谢,但在我移除 PHP 标记起始点上方的空格之前。 - mymotherland
这里需要记住的要点如下:
  1. 在php标签前后需要删除空格。
  2. 需要正确关闭<?php ....?>标签。
- mymotherland
1个回答

24

可能是由于某些文件中的PHP关闭标记(?>)后存在额外的空白符。

还请阅读此文章:

PHP开发:为什么重定向不起作用(头已发送)

  • 任何HTML输出,包括DOCTYPE声明或任何HTML标记,包括页面的head
  • 在页面的开头PHP标记之前或包含文件的PHP标记之外存在额外的空格
  • 在调用header()或session_start()之前使用print()或echo
  • 使用virtual()包括文件
  • 在页面开头使用字节顺序标记(BOM)

例如:

输入图像描述


1
如果闭合标签在最后一行,只需删除它即可。它是不必要的。 - Black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接