如何在PHP中记录对函数的所有调用?(mail()函数)
我有一个带有数十个虚拟主机的专用服务器。我想确定调用mail()函数的文件并全局记录。我需要这样的东西:如何在PHP中记录对函数的所有调用?(mail()函数),php,debugging,backtrace,Php,Debugging,Backtrace,我有一个带有数十个虚拟主机的专用服务器。我想确定调用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()或类似工具,因为我不能将其添加到
[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系统中添加一些东西来实现这一点 我看到的选项是:
mail()
函数非常基本,任何编写PHP代码的人都应该为它使用包装类,以保持理智)mail()
函数,那么我们可以通过记录调用mail()
的sendmail客户端来记录它。服务器上的sendmail
系统可能由一个unix shell脚本控制,该脚本由PHP的mail()
函数调用。您应该能够修改此shell脚本以记录邮件事件。这可能无法提供诸如行号之类的详细信息,但它会告诉您正在执行此操作的用户,等等您可以做的是,下载php源代码,编辑此文件:
ext/standard/mail.c
并在那里添加日志记录器
然后重新编译
这可能是您可以隐式调试谁从何处调用php函数的唯一方法。要阻止邮件(),只需从php的chroot中删除/usr/sbin/sendmail并强制执行经过身份验证的smtp。从>=PHP5.3.0开始,您只需在
php.ini
中指定指向所需logilfe位置的路径即可:
mail.log = /path/to/some/logfile
有关详细信息,请参阅。最简单的方法是创建您自己的函数,例如,
sendMail
,witch记录操作并发送邮件。可以或可以帮助您吗?xdebug提供此类功能,尽管在您的所有vhost上全局启用跟踪可能不是一个好主意。@dainisaols:他不拥有该代码。谢谢,但这对我来说是无效的:如果我有50个虚拟主机和他自己的WordPress/Joomla/Drupal,我就不能编辑任何PHP文件来替换mail()函数。对于xdebug也是一样,我无法为所有vhost启用此功能,我的服务器将爆炸…感谢SDC,我尝试设置sendmail_path,但它没有告诉我调用mail()函数的文件是什么。但我使用的是Suhosin,所以我会看看日志功能,这似乎正是我所需要的。谢谢