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 错误警告。

这些出现在所有页面上,有时连续出现两到三次:

遇到 PHP 错误

严重性:警告

消息:date() [function.date]:依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们为 'EST/-5.0/no DST' 选择了 'America/New_York'

文件名:库/Email.php

行号:704

遇到 PHP 错误

严重性:警告

消息:date() [function.date]:依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们为 'EST/-5.0/no DST' 选择了 'America/New_York'

文件名:库/Email.php

行号:709

除了上述之外,这两个在忘记密码表单提交后也会出现:

遇到 PHP 错误

严重性:警告

消息:无法修改标头信息 - 标头已发送(输出开始于 /home/username/codeigniter/system/core/Exceptions.php:185)

文件名:库/Session.php

行号:675

遇到 PHP 错误

严重性:警告

消息:无法修改标头信息 - 标头已发送(输出开始于 /home/username/codeigniter/system/core/Exceptions.php:185)

文件名:helpers/url_helper.php

行号:540

我不确定为什么会收到这些错误警告,或者我应该如何配置我的电子邮件发送选项。我在文档中看不到与这些特定警告消息相关的任何其他电子邮件发送选项。当我删除我的config/email.php文件并将 Ion Auth 设置use_ci_emailFALSE时,错误警告消失了。

我哪里做错了?

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

奇怪的一件事是 php.ini 的位置。我的意思是,在 public_html 文件夹中意味着 php.ini 可能被世界读取,这可能不是最好的想法。

无论如何,解决此问题的一种方法是在您的 public_html 文件夹中创建一个 test.php 文件,phpinfo(INFO_CONFIGURATION);并检查设置(如 include_path 或 allow_url_fopen)。然后在同一个文件夹中创建一个 php.ini(使用一些设置,如 allow_url_fopen),看看phpinfo(INFO_CONFIGURATION).

我的猜测是:

  • public_html/ .htaccess文件告诉 Apache 从位于 public_html 文件夹的 php.ini 文件中读取 php 设置。
  • 您的托管服务提供商有带有 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>

第二个使用自定义 phpini.file

  1. 创建一个名为myphpini.ini(或其他)的文件并将您的自定义设置放在那里。
  2. 然后创建名为configphp.php(或其他)的文件,该文件读取myphpini.ini
  3. 包含configphp.php在脚本顶部(或 CI2 引导文件中)

配置php.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 回答
0

我不应该创建自己的自定义php.ini文件。我构造不正确,我把它放在了错误的位置。尽管我在发布问题时认为我知道问题所在,但我没有。我的坏php.ini文件一直是这个问题的根源。

于 2012-12-21T22:26:59.130 回答