我有一个带有数十个虚拟主机的专用服务器。我想确定哪个文件正在调用 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 这样的文件中一样吗?
Thanks
一般来说,你会遇到这个问题; PHP 不提供内置的日志记录机制,因此您需要向 PHP 系统添加一些内容才能实现这一点。
我所看到的选项:
修改PHP代码。鉴于您在问题中所说的内容,我想这不是一个选项,但需要说明,因为这是显而易见的答案。 (PHP 的mail()
函数是如此基本,以至于任何编写 PHP 代码的人都应该使用包装类,无论如何只是为了保持理智)
如果我们具体谈论的是mail()
函数,然后我们可以通过记录 sendmail 客户端来记录它mail()
来电。你的sendmail
服务器上的系统可能由 PHP 调用的 unix shell 脚本控制mail()
功能。您应该能够修改此 shell 脚本来记录邮件事件。这可能无法为您提供行号等详细信息,但它会告诉您正在执行此操作的用户等。
Use the Suhosin PHP强化补丁。这是一个 PHP 补丁,提供了数十种与安全相关的功能;无论如何,我强烈推荐它用于共享托管环境。但对你来说它还包括记录功能,这可能允许您记录特定函数的使用情况,包括文件名和行号——即您正在寻找的场景。这是我推荐的解决方案......您在这里遇到的唯一大问题是您是否保持 PHP 版本最新,因为 Suhosin 目前仅适用于 PHP 5.3,而不适用于 5.4。作为一名 PHP 开发人员,我会努力在我的服务器上安装 PHP 5.4,但作为提供商,5.3 仍然受支持,因此没有任何问题。 (另一方面,如果您仍在使用 5.2,您应该尽快升级,因为它多年来一直不受支持并且存在已知的安全漏洞)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)