[英]How to find PHP script (and line) that accessing database
我知道有一种方法可以找到从您的服务器发送垃圾邮件的 php 脚本,但我有一个不同的问题。 我在重复向数据库发送查询音调的 php 代码时遇到问题,我无法确定是哪个代码做到了这一点。 我不是 php 开发人员。 我想以某种方式获得正在执行此操作的脚本和代码行,也许这样我将能够反向检查触发此问题的“重复”作业。 使用 mytop 我可以看到有很多查询,仅此而已:(
该脚本是 wordpress 插件的一部分,它没有受到损害,也许是错误的。
可悲的是,该脚本正在运行 100% 的资源并阻止对页面的访问。
这是一种可能的方法。 首先请注意,这会在您进行测试时影响服务器性能,因此请在您不期望大量流量时尝试这样做。
指示 MySQL 记录所有查询。
mysql> SHOW VARIABLES LIKE "general_log%";
它应该返回如下内容:
+------------------+----------------------------+
| Variable_name | Value |
+------------------+----------------------------+
| general_log | OFF |
| general_log_file | /var/run/mysqld/mysqld.log |
+------------------+----------------------------+
现在激活通用日志
mysql> SET GLOBAL general_log = 'ON';
在您的服务器中找到日志(位置可能与示例中的不同)并检查查询以查看查询的内容,以便您识别导致问题的插件。
先试试这个,如果你不能解决它,我们可以运行其他测试。
完成后不要忘记关闭常规日志:
mysql> SET GLOBAL general_log = 'OFF';
我从 mytop 开始,但最终内置了一些东西:
mysqladmin -i 1 processlist
多亏了这一点,我可以看到有多少查询以及哪些查询正在访问 mysql 服务器;
然后我为 php-fpm 启用了状态页面:
pm.status_path = /status
多亏了这一点,我可以看到触发命中的原因(在我的情况下,当然是 wp-cron.php ),所以这是一个线索,但不是答案。
我想将每个 php 调用记录到文件中,但意识到这太疯狂了,所以下一个理智的事情是使用 php 调试器 - XDebug。
那时我不知道我可以在没有 IDE 的情况下使用,只需编写那部分代码,感谢 and 我最终使用插件Remote - SSH
和PHP Debug
设置 IDE (Visual Studio Code)。 第二个安装在服务器端,因此我不必在我的机器上安装任何 XAMP/LAMP 服务器。
与 VSC 远程连接后,我刚刚打开插件代码文件,放置断点并开始跟踪代码在做什么,这要归功于使用 F10 和 F11 移动它。
这样我最终会浪费很多时间,但我能够找到向我的数据库发送垃圾邮件的错误代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.