【问题标题】:PHP mail: how to override or bypass mail.log settingPHP 邮件:如何覆盖或绕过 mail.log 设置
【发布时间】:2014-03-19 05:43:23
【问题描述】:

phpinfo() 返回这个有问题的特定设置:

mail.log    /var/log/phpmail.log

问题是我无法访问 phpmail.log 文件来设置正确的 CHMOD 权限,所以每次 mail() 触发时,我的 error_log 都会填满以下错误:

PHP Warning:  mail(/var/log/phpmail.log): failed to open stream: Permission denied

如果可能的话,我想完全跳过日志记录。否则,请定义一个我可以实际操作的不同日志文件。

ps - 这不是其他线程的重复。我无法更改上述文件的 CHMOD 值,我的问题是关于覆盖设置以完全跳过电子邮件记录。

【问题讨论】:

标签: php email


【解决方案1】:

我会先尝试联系管理您服务器的人,他或她应该解决此问题。

如果这不起作用,mail.log 设置是PHP_INI_PERDIR 设置,这意味着:

可以在 php.ini、.htaccess、httpd.conf 或 .user.ini 中设置条目(自 PHP 5.3 起)

显然,您无法访问系统的php.ini & httpd.conf,但如果提供给您.user.ini,或者您可以更改.htaccess 中的设置,那么这将是一种方法解决这个问题。

见:
.user.ini files
Set php.ini Values Using .htaccess

或者,您可以考虑使用不需要mail() 函数的Swift Mailer 或PHPMailer。一般来说,不鼓励使用mail(),它非常基础,而且很难正确和安全地使用。

【讨论】:

    【解决方案2】:

    您可以将php.ini 设置中的mail.log 文件路径更改为Apache 或您正在使用的任何服务器的可写位置。

    【讨论】:

    • 如果我无法访问 phpmail.log,我肯定无法访问 php.ini。
    • 你不能访问 php.ini 文件然后使用 ini_set (in2.php.net/ini_set) php
    • @RohitKumarChoudhary ini_set 不适用于此设置,因为它是 PHP_INI_PERDIR
    【解决方案3】:

    我最终找到了这段代码,它已经足够好了:

    error_reporting(0);
    

    在调用 mail() 函数之前插入。 Error_log 不再填满。

    【讨论】:

    • 这样做的问题是您不会再收到 any 错误。例如:mail() 发送消息失败你忘记了 mail() 的参数 2mail() 没有邮票 等. 我只会将此作为最后的手段。
    【解决方案4】:

    我是 PHP 的新手,所以我不知道我的解决方案是否真的是解决这个问题的一种方法,或者它是否因为巧合而起作用!

    我在这里遇到了同样的问题:调用 PHP 函数 mail() 会产生 PHP 警告。这一切都在第一条消息中进行了解释。我也没有权限编辑 mail.log 或保存它的目录。

    谷歌搜索,我发现一个调用 mail() 的代码以 @ 开头。我尝试使用代码 @mail() 并且成功了!

    这是我使用的工作代码:

    $mail_to = "MyAddress@email.com";
    $mail_from = $email; // This e-mail address is taken by an HTML form
    $mail_subject = "Test PHP function";
    $mail_body = "<p>This is the body message for the test of a PHP function!</p>";
    
    // HTML headers
    $mail_in_html = "MIME-Version: 1.0
    ";
    $mail_in_html .= "Content-type: text/html; charset=iso-8859-1
    ";
    $mail_in_html .= "From: <$mail_from>";
    
    // Submission process
    if(@mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
    {
        print "E-mail sent!";
    }
    else
    {
        print "Error: e-mail not sent.";
    }
    

    【讨论】:

    • 不,不要使用@,这是一种不好的做法——使用异常更好,@ 会导致“隐藏”错误。经过X小时的调试,你会发现它终于在某个函数之前找到了@
    猜你喜欢
    • 2014-07-20
    • 1970-01-01
    • 2016-09-28
    • 2010-12-18
    • 2013-11-30
    • 1970-01-01
    • 2014-05-09
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多