Php 两段(几乎)相同的代码产生不同的结果

Php 两段(几乎)相同的代码产生不同的结果,php,model-view-controller,Php,Model View Controller,我一直在做一个小MVC项目来帮助我自学,我遇到了一个完全困扰我的问题。我在这个MVC ish系统中创建了一个博客部分,并从ACL中获取了用户权限,没有任何问题。 我开始创建一个成员部分,当我添加任何权限检查时,我从Chrome中得到以下错误: 没有收到任何数据 无法加载网页,因为服务器未发送任何数据。 以下是一些建议: 稍后重新加载此网页。 错误324(net::ERR_EMPTY_RESPONSE):服务器关闭了连接,但未发送任何数据 我觉得这很奇怪,所以我仔细检查了我的错误日志,结果什么都没

我一直在做一个小MVC项目来帮助我自学,我遇到了一个完全困扰我的问题。我在这个MVC ish系统中创建了一个博客部分,并从ACL中获取了用户权限,没有任何问题。 我开始创建一个成员部分,当我添加任何权限检查时,我从Chrome中得到以下错误:

没有收到任何数据 无法加载网页,因为服务器未发送任何数据。 以下是一些建议: 稍后重新加载此网页。 错误324(net::ERR_EMPTY_RESPONSE):服务器关闭了连接,但未发送任何数据

我觉得这很奇怪,所以我仔细检查了我的错误日志,结果什么都没有显示。所以我决定将工作日志代码复制并粘贴到成员文件中,然后重新加载,我得到了完全相同的错误,现在这两个文件之间的唯一区别是文件名和类名。 以下是博客代码:

<?php
class blog extends frontController {
    public $model;
    public $user;

    public function __construct()
    {
        parent::__construct();

        $this->model = $this->autoload_model();
        $this->user  = $this->load_user();
        $this->user->getUserRoles();
    }

    public function index()
    {
        //Will only list the latest post ;)
        if(!$this->user->hasPermission('blog_access'))
        {
            $array = $this->model->list_posts();

            if(empty($array))
            {
                $this->variables(array(
                    'site_title' => 'View Blog Posts',
                    'post_title' => 'Sorry but there are no posts to display'
                ));
            } else {
                $this->variables(array(
                    'site_title' => 'View Blog Posts',
                    'list'       => $array[0],
                    'post_title' => $array[0]['entry_title'],
                    'link'       => str_replace(' ', '_',$array[0]['entry_title']),
                ));
            }
        } else {
            $this->variables(array(
                'site_title' => 'Error :: Design Develop Realize',
                'body'       => 'Sorry, but you do not have permission to access this',
            ));
        }

        $this->parse('blog/list', $this->toParse);
    }
任何帮助或建议将不胜感激,因为我被难倒了

PS是的,我有错误报告设置,涵盖所有内容,不,它不记录任何内容

编辑:因为所有文件都通过index.php,所以我将错误报告放在那里:

<?php
error_reporting(E_ALL);
ini_set('date.timezone', "Europe/London");

require_once('system/library/loader.php');

$loader = new loader();
$loader->loadCore(array('frontController', 'routing'));
更新:我修改了loadCore,以便如果调用的是acl,它将使用try…catch(),但这没有帮助,因为它不会在相同的chrome和IE页面上显示错误

更新2:我已经与我的主机进行了交谈,似乎每次出现此错误时,apache都会记录以下内容(不确定为什么我无法在日志副本中看到它!)

[Wed Feb 22 08:07:11 2012][error][client 93.97.245.13]提前结束 脚本头的名称:index.php


我很想看看loadCore函数里面有什么


你在哪里用过吗?这可能有助于阐明这个问题。

我想了解一下loadCore函数的内部内容


你在哪里用过吗?这可能有助于阐明这个问题。

您在不同的浏览器中测试过这个页面吗?谷歌搜索了你的错误,这表明它可能是特定于chrome的


您关于注释loadCore('acl')的声明很有趣,因此显然我将从这里开始。您确定它正在通过加载程序获取system/library/acl.php页面吗?Aka,它正在触发loadCore()中出口下方的第2行?var_转储返回imo以确保您获得了对象。

您是否在不同的浏览器中测试过此页面?谷歌搜索了你的错误,这表明它可能是特定于chrome的


您关于注释loadCore('acl')的声明很有趣,因此显然我将从这里开始。您确定它正在通过加载程序获取system/library/acl.php页面吗?Aka,它正在触发loadCore()中出口下方的第2行?var_转储返回imo以确保您获得了对象。

您已经注释掉了

/$array=$this->model->list_posts()

所以现在数组为空,您正试图使用

'list'=>$array[0], “post\u title”=>$array[0]['entry\u title',

这肯定会产生错误

编辑:-

我看你有

'body'=>“对不起,您没有访问此文件的权限,”);}


这是在第二个else中,这是一个语法错误。并生成输出。如果已启用,则压缩CI中的输出,这将导致此错误

您已经注释掉了

/$array=$this->model->list_posts()

所以现在数组为空,您正试图使用

'list'=>$array[0], “post\u title”=>$array[0]['entry\u title',

这肯定会产生错误

编辑:-

我看你有

'body'=>“对不起,您没有访问此文件的权限,”);}


这是在第二个else中,这是一个语法错误。并生成输出。如果已启用,则压缩CI中的输出,这将导致此错误

首先。当服务器在发送任何数据之前断开连接时,会产生此错误。 一些建议

  • 您的代码已损坏,让应用程序崩溃
  • 您的错误日志应该通过通知来增强
  • 编写测试以检查每个部件
  • 你应该启用并使用调试器(zend_调试器,xdebug)
  • 发布更多的连接信息(例如wget-O----debug'url')
这个问题有一个特殊的chrome问题
首先。当服务器在发送任何数据之前断开连接时,会产生此错误。 一些建议

  • 您的代码已损坏,让应用程序崩溃
  • 您的错误日志应该通过通知来增强
  • 编写测试以检查每个部件
  • 你应该启用并使用调试器(zend_调试器,xdebug)
  • 发布更多的连接信息(例如wget-O----debug'url')
这个问题有一个特殊的chrome问题

我建议检查标签前是否有空行


您使用的文件名是什么?您是否必须遵循任何约定才能适合您可能使用的框架?

我建议检查标记前是否有任何空行

您使用的文件名是什么?是否有任何约定必须遵循才能适合您可能使用的框架?

“脚本头过早结束”是内部服务器错误。这通常发生在脚本中断并且在发送错误消息之前不发送任何HTTP头时。这可能有几个原因

  • 一种可能是输出缓冲。默认情况下,可能是正在使用的服务器缓冲区输出。我建议使用
    output\u buffering=off
    on
    php.ini
    关闭
    output\u buffering

  • 制造
    protected function load_user()
    {
        if(!$this->loader->loaded['acl'])
        {
            $this->loader->loadCore('acl');
        }
    
        return $this->loader->loaded['acl'];
    }
    
    <?php
    error_reporting(E_ALL);
    ini_set('date.timezone', "Europe/London");
    
    require_once('system/library/loader.php');
    
    $loader = new loader();
    $loader->loadCore(array('frontController', 'routing'));
    
    public function loadCore($toLoad, $params = false)
    {
        //important task first, check if it is more then 1 or not
        if(is_array($toLoad))
        {
            //more then one so lets go to the task!
            foreach($toLoad as $file)
            {
                if(file_exists('system/library/' . $file . '.php'))
                {
                    require_once('system/library/' . $file . '.php');
    
                    if($params)
                    {
                        $this->loaded[$file] = new $file($params);
                    } else {
                        $this->loaded[$file] = new $file;
                    }
                } else {
                    trigger_error("Core File $file does not exist");
                }
            }
        } else {
            //Phew, less work, it is only one!
            if(file_exists('system/library/' . $toLoad . '.php'))
            {
                require_once('system/library/' . $toLoad . '.php');
    
                if($params)
                {
                    echo(__LINE__); exit;
                    $this->loaded[$toLoad] = new $toLoad($params);
                } else {
                    $this->loaded[$toLoad] = new $toLoad;
                }
            }
        }
    }