【问题标题】:Codeigniter blank page and error 500 in apache log?apache日志中的Codeigniter空白页和错误500?
【发布时间】:2013-03-13 09:35:54
【问题描述】:

昨天我花了 5 个多小时试图找出我的设置有什么问题。在 ci213/application/controllers 和 views 目录中,我有一个简单的 site.php 控制器和 test.php 视图。我不知道为什么该网站无法加载。有人对我接下来可以寻找什么有建议吗?也许记录它工作正常?如果我能得到更好的日志错误,我可以处理更多。

我认为它必须与 codeigniter 相关,因为我在 apache 根目录 (/var/www) 有一个 index.php 和 index.html,在站点根目录 (/var/www/vhosts/) 也有一个 index2.php srp-local/htdocs),当我转到 localhost/index.(php|html) 或 srp-local/index2.php 时,页面会正确加载和显示,因此 php 和 apache 可以正常工作。

尝试加载网站时我得到一个空白页面,所以我认为它必须与 CI 相关。我正在跟踪所有日志文件,唯一得到更新的是站点 access.log 并出现以下错误。

127.0.0.1 - - [23/Mar/2013:09:00:28 -0600] "GET / HTTP/1.1" 500 381 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0"

config.php

$config['base_url'] = 'http://srp-local/'; # My hosts file is configured for this.
$config['log_threshold'] = 4;
$config['log_path'] = '/var/www/vhosts/srp-local/logs/ci_error.log';

控制器/site.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Site extends CI_Controller
{
    public function index()
    {
        $this->load->view('test');
    }
}

views/test.php

<html>
<head>
</head>
<body>
<?php echo "PHP is working and the 'test' view was loaded"; ?>
</body>
</html>

Apache 根

/var/www/vhosts
$ ll
drwxrwsr-x  6 krizzo www-data 4096 Mar 22 10:45 it355
drwxrwsr-x  6 krizzo www-data 4096 Mar 22 17:45 srp-local

htdocs 是 srp-local 的 webroot,它的 index.php 指向 ci213 文件夹。

/var/www/vhosts
$ ll srp-local/
drwxrwsr-x 2 krizzo www-data 4096 Mar 22 17:06 cgi-bin
drwxrwsr-x 4 krizzo www-data 4096 Mar 22 17:14 ci213
drwxrwsr-x 2 krizzo www-data 4096 Mar 22 17:19 logs
drwxrwsr-x 5 krizzo www-data 4096 Mar 22 17:26 htdocs

所有日志位置/权限

/var/log/apache2/
    -rw-rw-rw- 1 www-data adm     0 Mar 23 08:52 php_errors.log
    -rw-r----- 1 root     adm 12191 Mar 23 09:32 access.log
    -rw-r----- 1 root     adm  4858 Mar 23 09:32 error.log

/var/www/vhosts/srp-local/logs/
    -rw-r--r-- 1 root   www-data  3227 Mar 22 19:42 error.log
    -rw-rw-r-- 1 krizzo www-data     0 Mar 23 09:37 ci_error.log
    -rw-r--r-- 1 root   www-data 12983 Mar 23 09:38 access.log

php.ini 文件设置

error_reporting = E_ALL & ~E_DEPRECATED
log_errors = On
error_log = /var/log/apache2/php_errors.log

【问题讨论】:

  • php.ini(或通过htaccess或您的脚本)中启用错误报告,将其设置为E_ALL,然后检查php错误日志
  • 我的 php.ini 文件中确实启用了错误日志记录。从 phpinfo() 我看到“error_log: /var/log/apache2/php_errors.log”和“log_error: On”。

标签: php apache codeigniter-2


【解决方案1】:

我终于找到了一些指引我正确方向的东西。这两篇文章提到 CI 如何在数据库模块中使用 @ 可能会导致该问题。

php return 500 error but no error log
CodeIgniter project loads blank webpage

我禁用了自动加载数据库模块并且站点正常工作。现在我只需要弄清楚我得到的可能导致 CI​​ 失败的数据库错误。一旦我弄清楚了,我会更新这个答案。

更新:我检查了帐户/密码和对数据库的访问,一切正常。问题是未安装 php mysql 驱动程序。这是我第一次真正使用Ubuntu系统,我以为mysql驱动会安装默认的php包,我错了。

安装 php5-mysqlnd 并在 CI 的自动加载中启用数据库库后,现在一切正常。我没有收到任何错误的事实确实让我考虑更改框架。

【讨论】:

  • 哈哈,哇哦,幸运的是我终于遇到了这个。全新 CentOS 6.4 安装,任何 apache 错误日志中都没有关于我的 CI 站点的 500 错误。做一个 'yum install php-mysql' 修复了这一切,blerrrg
  • @xref 你是我的救星!
  • 如果还安装了mysql驱动程序并且出现错误,请检查mysql驱动程序。对我来说,它是 msqli,而不是 mysql。
【解决方案2】:

以下是错误可能不可见的另一个原因:

我遇到了同样的问题。就我而言,我从生产环境中复制了源代码。因此index.php 中定义的ENVIRONMENT 变量被设置为'production'。这导致 error_reporting 设置为 0(无日志记录)。只需将其设置为'development',您就会开始在 apache 日志中看到错误消息。

原来 500 是由于数据库配置中缺少分号 :-)

【讨论】:

    【解决方案3】:

    在我的情况下(一个购物车类),这是一个 URL 的问题,看看

    /var/log/apache2/error.log
    

    如果你有类似的东西

    [client 127.0.0.1] File does not exist: ...
    

    然后你必须像这样在你的类名前加上'/index.php/'

    http://localhost/codeigniter/index.php/cart
    

    【讨论】:

      【解决方案4】:

      发布这个,以防万一它对某人有帮助...

      如果您在共享托管平台上并且无法访问您应该托管文件的目录以外的目录:诀窍是强制 php 抛出所有错误,即使 apache 不能。

      打开位于您的 codeigniter 安装根文件夹中的“index.php”;

      define('ENVIRONMENT', 'development');
      
      if (defined('ENVIRONMENT'))
      {
          switch (ENVIRONMENT)
              {
                  case 'development':
                  error_reporting(E_ALL);
                  /*added line below*/
                  ini_set('display_errors', '1');
                  break;
      ......
      

      进行上述更改后立即开始显示代码有什么问题,我能够修复它并启动并运行它。

      不要忘记将您的 codeigniter 环境设置为“生产” 修好了。

      【讨论】:

      • 你救了我的命!
      • 同样。关于如何返回更有用的错误消息的建议应该是第一条建议。
      【解决方案5】:

      我也在为这个问题苦苦挣扎。

      在我的新服务器上,我没有安装 php mb_string 模块。

      yum install php-mbstring 然后service httpd restart

      【讨论】:

        【解决方案6】:

        在我的情况下,错误没有显示,因为 php 设置中的显示错误未设置为活动。将其设置为活动 php 后,会显示导致 500 错误的问题。

        【讨论】:

          【解决方案7】:

          我检查了 7.0.xx 的 php 版本,所以我降级到 php 5.6.xx 并使用以下步骤让它为我工作。

          sudo a2dismod proxy_fcgi proxy; sudo service apache2 restart
          sudo add-apt-repository ppa:ondrej/php
          sudo apt-get update
          sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0
          

          【讨论】:

          • 安装两个不同版本的php没有任何意义。可能需要重新安装php5.6相关的包
          【解决方案8】:

          就我而言,我检查了位于您的 CI 项目的文件夹 logs/ 中的错误日志。
          碰巧是数据库相关的错误。

          【讨论】:

            猜你喜欢
            • 2012-05-05
            • 1970-01-01
            • 2023-04-08
            • 2012-09-02
            • 1970-01-01
            • 1970-01-01
            • 2011-12-21
            • 2018-04-01
            • 1970-01-01
            相关资源
            最近更新 更多