cloudwp | WooCommerce 繁體中文使用手冊

大量資料無法儲存(變體、稅率等)的問題

若發現商品變體、稅率及其他大量資料集無法儲存,可能是 Suhosin(PHP 安全模組)阻止了 POST 資料儲存。PHP 5.3.9+ 版本或執行 mod_security 的伺服器也可能發生此問題。

設定 Suhosin

若啟用 Suhosin,可能需要設定以提高資料提交限制。變更 Suhosin 設定的方式因主機商而異,建議向主機商諮詢而非自行處理。不過部分主機商允許透過 php.ini、suhosin.ini 或 .htaccess 變更設定。通常需要調整以下變數:

suhosin.post.max_array_index_length = 256
suhosin.post.max_totalname_length = 65535
suhosin.post.max_vars = 1024
suhosin.post.max_name_length = 256
suhosin.request.max_varname_length = 256
suhosin.request.max_array_index_length = 256
suhosin.request.max_totalname_length = 65535
suhosin.request.max_vars = 1024

儲存後需要重新啟動伺服器使變更生效。更多 Suhosin 設定資訊請參考 http://www.hardened-php.net/suhosin/configuration.html

共享主機環境中可能無法編輯 php.ini,此時可嘗試透過 .htaccess 設定 Suhosin:

php_value suhosin.max_array_index_length 256
php_value suhosin.post.max_array_index_length 256
php_value suhosin.post.max_totalname_length 65535
php_value suhosin.post.max_vars 1024
php_value suhosin.post.max_name_length 256
php_value suhosin.request.max_varname_length 256
php_value suhosin.request.max_array_index_length 256
php_value suhosin.request.max_totalname_length 65535
php_value suhosin.request.max_vars 1024

仍建議查看主機商的文件或聯絡主機商尋求協助。

若使用非拉丁字元,建議將以下數值從預設的 64 提高。這有助於處理非拉丁字元的問題。

suhosin.request.max_varname_length = 256

PHP 5.3.9+ 與 max_input_vars

較新的 PHP 版本實作了 php.ini 指令 max_input_vars,通常設為 1000。這代表提交超過 1000 個表單欄位會被截斷,導致資料無法儲存。

可在 php.ini 中變更:

max_input_vars = 3000

若需透過 htaccess 處理(例如在共享主機上),可使用:

php_value max_input_vars 3000

Mod_security

Mod_security 也可能阻止資料儲存。若發生此情況,你可能會遇到 503 錯誤。與上述問題相同,建議聯絡主機商協助解決。解決方法包含:

  • 設定 mod_security 允許資料通過(進階)
  • 依 IP 停用 mod security
  • (僅限 Dreamhost)在控制面板關閉「Extra web security」設定

參考資料:
http://www.nivas.hr/blog/2012/04/04/beware-of-max_input_vars-php-ini-configuration-option/

https://shopplugin.net/kb/unable-to-save-products-with-large-amount-of-variations/

WP Max Submit Protect

若要驗證是否確實遇到本文件描述的問題,可暫時安裝並啟用此免費外掛:WP Max Submit Protect