参考我之前询问的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。
答案 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