0

私が以前に尋ねたCodeIgniter Blank Pageの質問を参照してください。

問題に光を当てるかもしれないいくつかの新しい情報が明らかになりました。

新しく構築したサーバー (CI 2.1.3 - 最新リリース) は、これが正しく機能し、WSOD を提供していませんでしたが、開発サーバーのサブドメインにあります。WSOD の問題は、サブドメインにない「ライブ」サイトでまだ発生しています。

明らかに、「ライブ」サイトは 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 を提供するコントローラの 1 つは、「開発」で動作しているが、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
 */

前に言ったように、このプロセスは開発中ですが、ライブで 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 に答える