WordPressの「Favicon by RealFaviconGenerator」エラー対応
WordPressのプラグイン「Favicon by RealFaviconGenerator」がfavicon生成時にエラーになるようになったので調査しているときの覚書。
環境: CentOS Stream 8, PHP 8.0.20, WordPress 6.2.2, Favicon by RealFaviconGenerator 1.3.27
エラー内容
2023/08/04 09:37:36 [error] 1826#1826: *51 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught TypeError: ftp_pwd(): Argument #1 ($ftp) must be of type resource, null given in /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php:232Stack trace:#0 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php(232): ftp_pwd()#1 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/class-wp-filesystem-ftpext.php(459): WP_Filesystem_FTPext->cwd()#2 /home/httpd/saitama-nougeka/wordpress/wp-admin/includes/file.php(1569): WP_Filesystem_FTPext->is_dir()#3 /home/httpd/saitama-nougeka/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-api-response.php(203): unzip_file()#4 /home/httpd/saitama-nougeka/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-api-response.php(166): Favicon_By_RealFaviconGenerator_Api_Response->downloadZipFile()#5 /home/httpd/saitama-nougeka/wordpress/wp-content/plug" while reading response header from upstream, ...
なぜかftp接続のカレントディレクトリを参照しようとしている。
ソースを追ってみると、$wp_filesystemを生成するときに
extension_loaded( 'ftp' )
でphpのftpモジュールが有効かどうか判断していた。
phpモジュールをコマンドで確認してみる。
# php -m
ftpモジュールを無効化してみる。
# cd /etc/php.d/
# mv 20-ftp.ini 20-ftp.ini.bak
確認してphp-fpm再起動。
# php -m
# systemctl reload php-fpm
これでWordPress管理画面からfavicon生成。
今度はftpsocketsを使うようになってエラーになった。
socketsモジュールは無効化したくないので、get_filesystem_method関数の「filesystem_method」フィルタにフックすることにした。
まずはftpモジュールを有効化して元に戻す。
# mv 20-ftp.ini.bak 20-ftp.ini
# systemctl restart php-fpm
テーマのfunctions.phpに下記追記。
function func_filesystem_method($method) {// this hook for "Favicon by RealFaviconGenerator v1.3.27" errorif ($method == 'ftpext') {$method = 'direct';}return $method;}// wordpress/wp-admin/includes/file.php: 2213add_filter('filesystem_method', 'func_filesystem_method');
これでWordPress管理画面からfavicon生成。
無事完了。
favicon生成するときだけなので、普段はこのhookをコメントアウトしておけばいい。
そのうち修正されていると思う。
2024/10/28 追記
別環境でエラー
環境: FreeBSD 14.1-RELEASE-p5, PHP 8.3.6, WordPress 6.6.2, Favicon by RealFaviconGenerator 1.3.36
2024/10/28 08:21:16 [error] 1169#100257: *129 FastCGI sent in stderr: "PHP message: ftpsockets; PHP message: PHP Deprecated: Creation of dynamic property ftp::$features is deprecated in /home/httpd/gokou-koshigaya-ss/wordpress/wp-admin/includes/class-ftp.php on line 151; PHP message: ; PHP message: PHP Fatal error: Uncaught Error: Undefined constant "FS_CHMOD_DIR" in /home/httpd/gokou-koshigaya-ss/wordpress/wp-admin/includes/file.php:1781Stack trace:#0 /home/httpd/gokou-koshigaya-ss/wordpress/wp-admin/includes/file.php(1657): _unzip_file_ziparchive('/home/httpd/gok...', '/home/httpd/gok...', Array)#1 /home/httpd/gokou-koshigaya-ss/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-api-response.php(205): unzip_file('/home/httpd/gok...', '/home/httpd/gok...')#2 /home/httpd/gokou-koshigaya-ss/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-api-response.php(166): Favicon_By_RealFaviconGenerator_Api_Response->downloadZipFile('/home/httpd/gok...', '/home/httpd/gok...', 'https://realfav...')#3 /home/httpd/gokou-koshigaya-ss/wordpress/wp-content/plugins/favicon-by-realfavicongenerator/admin/class-favicon-by-realfavicongenerator-admin.php(215): Favicon_By_RealFaviconGenera" while reading response header from upstream, client: 192.168.10.102, server: dev.koshigaya-ss.com, request: "GET /wp-admin/admin-ajax.php?action=fbrfg_install_new_favicon&json_result_url=%2Fapi%2Finteractive-requests%2Fcdd81229-2944-4798-9099-17aa1ddf4c91 HTTP/1.1", upstream: "fastcgi://unix:/var/run/php-fpm.sock:", host: "dev.koshigaya-ss.com", referrer: "http://dev.koshigaya-ss.com/wp-admin/themes.php?page=favicon-by-realfavicongenerator%2Fadmin%2Fclass-favicon-by-realfavicongenerator-admin.phpfavicon_appearance_menu&json_result_url=%2Fapi%2Finteractive-requests%2Fcdd81229-2944-4798-9099-17aa1ddf4c91"
テーマのfunctions.phpに下記追記。
function func_filesystem_method($method) {// this hook for "Favicon by RealFaviconGenerator v1.3.36" errorif ($method == 'ftpsockets') {$method = 'direct';}return $method;}// wordpress/wp-admin/includes/file.php: 2213add_filter('filesystem_method', 'func_filesystem_method');