簡體   English   中英

無法捕獲 WooCommerce REST API 導致 PHP 錯誤的請求

[英]Unable to capture WooCommerce REST API request which is causing PHP error

我有一個第三方應用程序,它通過 REST API 將產品數據插入到 WooCommerce。第三方應用程序不記錄出站 API 請求。

第三方應用程序正在向 WooCommerce 發出請求,這會導致 PHP 錯誤。

[16-Jan-2023 14:52:23 UTC] PHP Fatal error:  Uncaught TypeError: preg_match(): Argument #2 ($subject) must be of type string, WP_REST_Request given in /home/CENSORED/public_html/wp-includes/formatting.php:1596
Stack trace:
#0 /home/CENSORED/public_html/wp-includes/formatting.php(1596): preg_match('/[\\x80-\\xff]/', Object(WP_REST_Request))
#1 /home/CENSORED/public_html/wp-includes/formatting.php(2207): remove_accents(Object(WP_REST_Request))
#2 /home/CENSORED/public_html/wp-includes/class-wp-hook.php(310): sanitize_title(Object(WP_REST_Request))
#3 /home/CENSORED/public_html/wp-includes/plugin.php(205): WP_Hook->apply_filters(Object(WP_REST_Request), Array)
#4 /home/CENSORED/public_html/wp-includes/taxonomy.php(1751): apply_filters('pre_term_slug', Object(WP_REST_Request), 'pa_colour')
#5 /home/CENSORED/public_html/wp-includes/taxonomy.php(1653): sanitize_term_field('slug', Object(WP_REST_Request), 0, 'pa_colour', 'db')
#6 /home/CENSORED/public_html/wp-includes/taxonomy.php(2385): sanitize_term(Array, 'pa_colour', 'db')
#7 /home/CENSORED/public_html/wp-content/plugins/woocommerce/includes/rest-api/Controllers/Version3/class-wc-rest-terms-controller.php(407): wp_insert_term('DENIM BLUE', 'pa_colour', Array)
#8 /home/CENSORED/public_html/wp-includes/rest-api/class-wp-rest-server.php(1171): WC_REST_Terms_Controller->create_item(Object(WP_REST_Request))
#9 /home/CENSORED/public_html/wp-includes/rest-api/class-wp-rest-server.php(1018): WP_REST_Server->respond_to_request(Object(WP_REST_Request), '/wc/v2/products...', Array, NULL)
#10 /home/CENSORED/public_html/wp-includes/rest-api/class-wp-rest-server.php(442): WP_REST_Server->dispatch(Object(WP_REST_Request))
#11 /home/CENSORED/public_html/wp-includes/rest-api.php(410): WP_REST_Server->serve_request('/wc/v2/products...')
#12 /home/CENSORED/public_html/wp-includes/class-wp-hook.php(308): rest_api_loaded(Object(WP))
#13 /home/CENSORED/public_html/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array)
#14 /home/CENSORED/public_html/wp-includes/plugin.php(565): WP_Hook->do_action(Array)
#15 /home/CENSORED/public_html/wp-includes/class-wp.php(399): do_action_ref_array('parse_request', Array)
#16 /home/CENSORED/public_html/wp-includes/class-wp.php(780): WP->parse_request('')
#17 /home/CENSORED/public_html/wp-includes/functions.php(1332): WP->main('')
#18 /home/CENSORED/public_html/wp-blog-header.php(16): wp()
#19 /home/CENSORED/public_html/index.php(17): require('/home/CENSORED...')
#20 {main}
thrown in /home/CENSORED/public_html/wp-includes/formatting.php on line 1596

我認為 PHP 錯誤是一個錯誤,需要報告給 WooCommerce 和/或 WordPress。我無法捕獲請求的內容,因此我無法提供重現錯誤報告的步驟。

我正在測試 WordPress 和 WooCommerce 的完全空白和最新安裝,沒有其他插件(下面提到的插件除外)。

我努力了:

我如何捕獲完整的請求,以便我可以確認這是 WooCommerce 或 WordPress 錯誤並報告給相應的 github?

我建議:在這種特殊情況下,“通過 printf 調試”或“通過print_r調試”。

編輯/home/CENSORED/public_html/index.php並在第 17 行之前插入:

syslog(LOG_ERROR, print_r($_GET, TRUE));
syslog(LOG_ERROR, print_r($_POST, TRUE));

根據您的插件觸發的請求類型,內容應出現在這些日志輸出之一中。

您也可以 go 到/home/CENSORED/public_html/wp-includes/formatting.php並在第 1596 行之前插入:

syslog(LOG_ERROR, print_r($text, TRUE));

獲取格式錯誤的字符串變量。

這樣做之后,您應該能夠通過以下方式在服務器的系統日志中找到日志行:

tail -f /var/log/syslog

如果不幸的是您無法訪問服務器機器上的 wp 源代碼,您應該通過WiresharkTShark在運行插件的桌面機器上捕獲請求。 我不會責怪它矯枉過正。 通過過濾服務器 IP、協議 http 和方法( http.request.method == GEThttp.request.method == POST )的捕獲,問題的核心應該很快就會揭示出來(也許你必須從重置請求方案httpshttp )。

暫無
暫無

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

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