唯一不一致的CI空白页问题

时间:2013-03-29 12:02:24

标签: codeigniter

参考我之前询问的CodeIgniter Blank Page问题。

一些新的信息已经曝光,可能会对这个问题有所了解。

我新构建的服务器(CI 2.1.3 - 最新版本),这是正常工作而不是给WSOD的是我的开发服务器的子域。 WSOD问题仍然存在于“实时”站点上,而该站点不属于子域。

显然,“live”网站位于public_html中,开发版本位于“codeigniter”子域中。两台服务器上的其他所有内容都相同。相同的PHP 5.3设置。相同的.htaccess文件。相同的CI 2.1.3设置,显然配置更改为指向“开发”中的子域和“实时”中的域。

问题是一样的。在ENTER PRESS或外部链接ACTIVATION(例如来自电子邮件)中,我在“实时”中获得WSOD,但这在“开发”中正常工作。在没有“实时”按钮的情况下激活的每个控制器都给了我WSOD,而所有页面在“开发”中正常工作。

作为检查,我构建了一个全新的CI根安装(没有子域),问题反映了“实时”中发生的情况。

展示WSOD行为的流程没有附加视图,只是打印出成功的消息。

以下是代码:

.htaccess - 在“开发”的子域文件夹和“live”的public_html中:

Options -Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_URI} ^application.*
RewriteRule ^(.*)$ /index.php?/$1 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L] 

ErrorDocument 404 /index.php

其中一个控制台在登录后粘贴到浏览器中时将“WSOD”置于“实时”状态,但正在“开发”中工作是inviteusers.php只需要一个公司ID和用户ID,并向用户发送一个包含登录详细信息的链接对于新帐户。 “message”正文中的一些无关代码已被删除以缩短它:

<?php if ( ! defined('BASEPATH')) exit('No Direct Script Access Allowed');
/**
 * Invite Users Controller
 *
 * ----------------------------------------------------------------------------
 */

class InviteUsers extends MY_Controller
{

    function __construct()
    {
        parent::__construct();
        $this->load->model('UserDetails_model');
        $this->load->helper('date');
    }

    public function index()
    {
        if (!$this->session->userdata('clientid') && !$this->session->userdata('userid')) {
            redirect('login');
        }

        // Add Client ID for All Uninvited Users for a Client
        $lookupid['clientid']   = "CID";

        // Add User ID to Add ONE Uninvited user for a Client
        // Change UserDetails_model to take UID if this option is used
        $lookupid['userid']     = "UID";

        $invites = $this->UserDetails_model->getInvites($lookupid);

        foreach ($invites as $invite) {

            if ($invite['new'] == "Y") {

                $message   = "Hi ".$invite['username']." ".$invite['usersurname'].", \n \n";    
                $this->load->helper('email');

                $this->email->set_newline("\r\n");
                $this->email->from('email@address.com', 'System Messenger');
                $this->email->to($invite['useremail']);
                $this->email->bcc('admin@address.com');
                $this->email->subject('Temporary Login Details');
                $this->email->message($message);

                $sent = $this->email->send();

                if ($sent) {
                    echo "SUCCESS!!!   ";
                    echo "NAME:     ".$invite['username']." ".$invite['usersurname']."   ";
                    echo "E-MAIL:   ".$invite['useremail']."   ";
                    echo "PASSWORD: ".$invite['temppass']."   ";
                    echo "NEW:      ".$invite['new']."";
                }

            } else {

                $message   = "Hi ".$invite['username']." ".$invite['usersurname'].", \n \n";

                $this->load->helper('email');

                $this->email->set_newline("\r\n");
                $this->email->from('email@address.com', 'System Messenger');
                $this->email->to($invite['useremail']);
                $this->email->bcc('admin@address.com');
                $this->email->subject('Temporary Login Details');
                $this->email->message($message);

                $sent = $this->email->send();

                if ($sent) {
                    echo "SUCCESS!!!   ";
                    echo "NAME:     ".$invite['username']." ".$invite['usersurname']."   ";
                    echo "E-MAIL:   ".$invite['useremail']."   ";
                    echo "PASSWORD: ".$invite['temppass']."   ";
                    echo "NEW:      ".$invite['new']."   ";
                }

            }

        }

    }

}
/*
 * End of file inviteusers.php
 * Location: ./application/controllers/inviteusers.php
 */

正如我之前所说 - 这个过程正在开发中,但是给了WSOD。

MY_Controller只执行会话查找并检查一些变量。它简单而坚固,并且一直没有使用mod工作。

我认为在最近设置的子域中使用SAME .htaccess文件并更改配置以反映URL时,可能会有一个很大的错误。所有其他环境变量都是完全相同的。相同的服务器,相同的托管公司,运行相同模块的相同Apache版本,具有相同模块的相同PHP版本,超时,内存等设置。

提供WSOD的控制器为我提供了对某些管理功能的快速和轻松访问,因此它们必须工作......而且它们......在同一服务器上的“开发”子域中“运行”运行在public_html。

1 个答案:

答案 0 :(得分:0)

如果满足某个条件方案,您没有输出任何内容!

如果$sent变量等同于true,您的电子邮件已成功发送,则您只回显信息。如果,则表示您没有显示任何内容!由于没有实际的PHP错误,启用它们将无法解决任何问题(尽管99%的时间,这是空白页面背后的问题)。

使用电子邮件的调试器在那里抛出else语句,你应该得到一些关于发生了什么的指示。

if ($sent) {
    echo "SUCCESS!!!   ";
    echo "NAME:     ".$invite['username']." ".$invite['usersurname']."   ";
    echo "E-MAIL:   ".$invite['useremail']."   ";
    echo "PASSWORD: ".$invite['temppass']."   ";
    echo "NEW:      ".$invite['new']."";
}
else
{
    echo $this->email->print_debugger();
}

此外,对于它的价值,您的.htaccess不需要系统和应用程序文件夹的规则。您也不需要在RewriteRule URL前面添加斜杠(RewriteBase为您处理)。

Options -Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L] 

ErrorDocument 404 index.php