gpt4 book ai didi

php - 如何在 PHP 中记录对函数的所有调用? (邮件() 函数)

转载 作者:可可西里 更新时间:2023-11-01 12:37:05 25 4
gpt4 key购买 nike

我有一个带有数十个虚拟主机的专用服务器。我想确定哪个文件正在调用 mail() 函数并在全局记录它。我需要这样的东西:

[Wed Feb 13 10:42:39 2013] mail() called from /var/www/example1.php on line 70
[Wed Feb 13 10:42:40 2013] mail() called from /var/www/example2.php on line 70

我不能使用 debug_backtrace() 或类似方法,因为我不能将它添加到服务器中的任何 PHP 文件中。我可以将所有函数调用全局记录在一个文件中,就像错误记录到一个文件(如 error.log)一样吗?

谢谢

最佳答案

一般来说,你会遇到麻烦; PHP 不提供内置的日志记录机制,因此您需要向 PHP 系统添加一些内容才能执行此操作。

我看到的选项:

  1. 修改PHP代码。鉴于您在问题中所说的内容,我想这不是一个选项,但需要说明,因为这是显而易见的答案。 (PHP 的 mail() 函数非常基础,任何编写 PHP 代码的人都应该为它使用一个包装类,以保持理智)

  2. 如果我们专门讨论 mail() 函数,那么我们可以通过记录 mail() 调用的 sendmail 客户端来记录它。服务器上的 sendmail 系统可能由 PHP 的 mail() 函数调用的 unix shell 脚本控制。您应该能够修改此 shell 脚本以记录邮件事件。这可能无法为您提供行号等详细信息,但它会告诉您正在执行此操作的用户等。

  3. 使用 Suhosin PHP hardening patch .这是一个 PHP 补丁,提供了许多与安全相关的功能;无论如何,我强烈推荐它用于共享托管环境。但对你来说它还包括 logging features ,这可能允许您记录特定功能的使用情况,包括文件名和行号——即您正在寻找的场景。这是我推荐的解决方案....您在这里遇到的唯一大问题是您是否使 PHP 版本保持最新,因为 Suhosin 目前仅适用于 PHP 5.3,不适用于 5.4。作为一名 PHP 开发人员,我会努力在我的服务器上安装 PHP 5.4,但作为提供商,5.3 仍然受支持,所以这没什么问题。 (另一方面,如果您仍在使用 5.2,您应该尽快升级,因为它多年来一直不受支持并且存在已知的安全漏洞)。

关于php - 如何在 PHP 中记录对函数的所有调用? (邮件() 函数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14850756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com