0

在我的 php 应用程序中,我想创建一个文本格式的错误日志,所以像这样尝试它在我的本地机器上工作正常

if(!$mail->Send())
{
 echo "Message could not be sent. <p>";
 echo "Mailer Error: " . $mail->ErrorInfo;
 $stringData = "Error Info: ".$mail->ErrorInfo."\t\t";
 $stringData .= "Email to reciepient \t Regnumber: ".$RegNo." \t  Apllicant Name: ".$ApplicantName." Failed --- end ----";


 $fp = fopen($_SERVER['DOCUMENT_ROOT']."/lib/email_errorlog.txt","wb");
 fwrite($fp,$stringData);
 fclose($fp);

 exit;
  }

我已经在PHP Create and Save a txt file to root directory中看到过讨论,但它对我不起作用。问题是,没有显示错误,但没有创建文本文件。需要在服务器上设置任何权限?

4

2 回答 2

2

您必须确保:

  • 文件夹 /lib 存在于文档根目录中
  • webserver process有权写入该文件夹。

如果您使用您的ftp 帐户创建文件夹,则网络服务器进程将无权访问。您可以将权限设置为 777,但之后每个人都可以访问。最好将权限设置为 770 并将文件夹的组设为网络服务器组 ID。

于 2012-10-02T08:15:27.243 回答
0

您可以在尝试创建文件之前检查文件(或更确切地说是父目录)是否可写。

并根据php手册 fopen()

成功时返回文件指针资源,错误时返回 FALSE。

因此,您可以使用此 +$php_errormsgget_last_error()构建正确的文件编写代码:

$fp = fopen($_SERVER['DOCUMENT_ROOT']."/lib/email_errorlog.txt","wb");
if( $fp === false){
    // Notification about failed opening
    echo "Cannot open file: " + $php_errormsg; // Not that wise in production
    exit();
}

fwrite($fp,$stringData);
fclose($fp);
exit();

但是如果配置正确,所有错误都应该在错误日志中。

于 2012-10-02T08:26:29.403 回答