2

私はIon Authを使用しており、CI から送信される電子メールに依存する忘れたパスワード機能を実装しようとしています。私の LAMP サーバーは共有 cPanel アカウントにあり、sendmail. php.iniただし、ディレクトリ内の独自のファイルでPHP 設定を上書きすることができますpublic_html

メール送信の設定に関する CodeIgniter 2 のドキュメントに従って、次のことを行いました...

1)次の場所にあるというファイルを作成しましたapplication/config/email.php

2) email.php次のコードが含まれています。

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| EMAIL SENDING SETTINGS
| -------------------------------------------------------------------
*/

$config['protocol'] = 'sendmail';

/* End of file email.php */
/* Location: ./application/config/email.php */

3)application/config/ion_auth.phpファイルで、この値をに設定しましたTRUE

$config['use_ci_email'] = TRUE;

メールは正常に送信されますが、すべてのページでさまざまな PHP エラー警告が表示されます。

これらはすべてのページに表示され、場合によっては 2 ~ 3 回続けて表示されます。

PHP エラーが発生しました

重大度: 警告

メッセージ: date() [function.date]: システムのタイムゾーン設定に頼るのは安全ではありません。date.timezone 設定または date_default_timezone_set() 関数を使用する必要があります。これらの方法のいずれかを使用してもこの警告が表示される場合は、タイムゾーン識別子のスペルが間違っている可能性があります。代わりに、「EST/-5.0/no DST」に「America/New_York」を選択しました

ファイル名: libraries/Email.php

ライン番号: 704

PHP エラーが発生しました

重大度: 警告

メッセージ: date() [function.date]: システムのタイムゾーン設定に頼るのは安全ではありません。date.timezone 設定または date_default_timezone_set() 関数を使用する必要があります。これらの方法のいずれかを使用してもこの警告が表示される場合は、タイムゾーン識別子のスペルが間違っている可能性があります。代わりに、「EST/-5.0/no DST」に「America/New_York」を選択しました

ファイル名: libraries/Email.php

ライン番号: 709

上記に加えて、これら 2 つは、パスワードを忘れた場合のフォームが送信された後にも表示されます。

PHP エラーが発生しました

重大度: 警告

メッセージ: ヘッダー情報を変更できません - ヘッダーは既に送信されています (出力は /home/username/codeigniter/system/core/Exceptions.php:185 で開始)

ファイル名: libraries/Session.php

ライン番号: 675

PHP エラーが発生しました

重大度: 警告

メッセージ: ヘッダー情報を変更できません - ヘッダーは既に送信されています (出力は /home/username/codeigniter/system/core/Exceptions.php:185 で開始)

ファイル名: helpers/url_helper.php

ライン番号: 540

これらのエラー警告が表示される理由や、メール送信オプションを設定する方法がわかりません。ドキュメントには、これらの特定の警告メッセージに関連する他の電子メール送信オプションはありません。ファイルを削除してconfig/email.phpIon Authuse_ci_emailを に設定するFALSEと、エラー警告が消えます。

どこで私は間違えましたか?

4

3 に答える 3

4

これはCIとは関係ありません。PHP では、設定を行う必要がありますdate.timezone

http://php.net/manual/en/datetime.configuration.php#ini.date.timezoneを参照してください。

于 2012-12-05T22:09:25.000 に答える
2

奇妙な点の 1 つは、php.ini の場所です。つまり、 public_html フォルダーでは、php.ini が世界中で読み取れる可能性があることを意味しますが、これは最高のアイデアではない可能性があります。

とにかく、これをトラブルシューティングする 1 つの方法は、public_html フォルダーに test.php ファイルを作成しphpinfo(INFO_CONFIGURATION);、設定 (include_path や allow_url_fopen など) のみを確認することです。次に、同じフォルダーに php.ini を作成し (allow_url_fopen などの設定を行います)、何かが変更されたかどうかを確認しphpinfo(INFO_CONFIGURATION)ます。

私の推測では、次のいずれかです。

  • public_html/ .htaccessファイルは、public_html フォルダーにある php.ini ファイルから php 設定を読み取るように Apache に指示しています。
  • ホスティングプロバイダーには、mod_suphp を備えた cpanel があります (非常に一般的です)。suPHP では、デフォルトで、各ユーザーが適切と思われる独自の php.ini を設定できます。これは、sustem の php.ini をオーバーライドします。

このリンクこれを参照してください


いずれにせよ、次のいずれかによって、完全にオーバーライドすることなく php.ini 設定を微調整できます。

  • アカウントのルート .htaccess で設定を行います
  • 設定を読み取って適用するスクリプトを作成する

この方法でオーバーライドできるのは、PHP_INI_ALL としてマークされているランタイム設定のみであることに注意してください。設定モードの詳細については、このリンクを参照してください。変更可能な php.ini 設定の包括的なリストについては、これを参照してください。


最初の方法は非常に簡単です。

.htaccess ファイル

<IfModule mod_php5.c>
  php_value date.timezone "Europe/Lisbon"
  php_admin_flag engine on
</IfModule>

2 つ目は、カスタムの phpini.file を使用します

  1. (または何か)という名前のファイルを作成し、myphpini.iniそこにカスタム設定を配置します。
  2. 次に、configphp.php(または何か)という名前のファイルを作成しますmyphpini.ini
  3. configphp.phpスクリプトの先頭 (または CI2 ブートストラップ ファイル) に含めます。

configphp.php

$config = parse_ini_file('myphpini.ini);
foreach ($config as $key => $val) {
    print 'before->' . ini_get($key) . '<br/>';
    ini_set($key, $val);
    print 'after->' . ini_get($key) . '<br/>';
}

それがどのように判明したかについて私たちに知らせてください

于 2012-12-06T00:28:45.810 に答える