0

参考我之前提出的CodeIgniter 空白页问题。

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

我新建的服务器(CI 2.1.3 - 最新版本)工作正常且不提供 WSOD,位于我的开发服务器的子域中。WSOD 问题仍然发生在不在子域中的“实时”站点上。

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

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

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

表现出 WSOD 行为的进程没有附加视图,只是简单地打印成功消息。

这是代码:

.htaccess - 在“development”的子域文件夹和“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,并向用户发送包含新登录详细信息的链接帐户。“消息”正文中的一些无关代码已被删除以缩短它:

<?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
 */

正如我之前所说 - 这个过程正在开发中,但会在 LIVE 中提供 WSOD。

MY_Controller 只是执行会话查找并检查一些变量。它简单而可靠,并且一直在没有模组的情况下工作。

我认为可能有一个重要线索,因为它在最近设置的子域中正常工作,具有相同的 .htaccess 文件和配置更改以反映 URL。所有其他环境变量完全相同。相同的服务器,相同的托管公司,运行相同模块的相同 Apache 版本,相同模块的相同 PHP 版本,超时,内存等设置。

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

4

1 回答 1

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
于 2013-03-29T22:28:11.787 回答