簡體   English   中英

如何找到訪問數據庫的 PHP 腳本(和行)

[英]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 - SSHPHP Debug設置 IDE (Visual Studio Code)。 第二個安裝在服務器端,因此我不必在我的機器上安裝任何 XAMP/LAMP 服務器。

與 VSC 遠程連接后,我剛剛打開插件代碼文件,放置斷點並開始跟蹤代碼在做什么,這要歸功於使用 F10 和 F11 移動它。

這樣我最終會浪費很多時間,但我能夠找到向我的數據庫發送垃圾郵件的錯誤代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM