参考我之前提出的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 中运行。