こんばんは。
今回はシャーロット・プリンも幸せになるレベルの備忘録です。
ある日突然、WordPressのテーマエディタが壊れました
サイトは問題なく表示されており、おかしいのはテーマエディタだけ。

ファイルの中身が表示されず、
「Fatal error: Out of memory (allocated 103104512 bytes) (tried to allocate 29176944 bytes) in /~~~/wp-admin/includes/file.php on line 89」
のエラーメッセージが。
メモリオーバーのエラー?
どうもメモリ関連のエラーのようです。
これは「WordPressに割り当てられているメモリの値が小さい」ことが原因かと思い、メモリ上限を変更しようとしたのですが、今回の案件で使ってたサーバはメモリ上限が全く変更できず。。
これは困った。
というか、テーマエディタでメモリエラーっておかしくない??
「get_file_description」内でエラーが
エラーメッセ―ジに表示されている、file.phpの該当箇所を確認してみると、get_file_description」という関数の箇所でした。
function get_file_description( $file ) {
global $wp_file_descriptions, $allowed_files;
$dirname = pathinfo( $file, PATHINFO_DIRNAME );
$file_path = $allowed_files[ $file ];
if ( isset( $wp_file_descriptions[ basename( $file ) ] ) && '.' === $dirname ) {
return $wp_file_descriptions[ basename( $file ) ];
} elseif ( file_exists( $file_path ) && is_file( $file_path ) ) {
$template_data = implode( '', file( $file_path ) );
if ( preg_match( '|Template Name:(.*)$|mi', $template_data, $name ) ) {
/* translators: %s: Template name. */
return sprintf( __( '%s Page Template' ), _cleanup_header_comment( $name[1] ) );
}
}
return trim( basename( $file ) );
この中の、「$template_data = implode( ”, file( $file_path ) );」の部分にてエラー。
PGT先生に相談してみると、「大容量のファイルを複数読み込もうとしてメモリエラーになってると思うやで」との回答が。
そんなファイルあったかなぁ?と思って詳しく見ると、まさかの犯人発見!!
犯人は大容量のSVGファイルでした
なんとテーマディレクトリの中に、20MB越えの.svgファイルが何個もありました。
ここは私が担当していないページだったので、全然気づきませんでした。。
SVGファイルは画像ではあるのですが、実態はテキスト(XML) です。
テーマエディタ内で、大容量のテキストを読み込もうとして、メモリオーバーで力尽きた。。ということでした。
そもそもSVGファイルがそんな大容量になることは基本的にないのですが、このページを担当した方がグラデーション付きのでっかい画像をSVGにしていたのが原因のようでした。
グラデはSVGにしたらアカン。。
ということで、SVG画像をwebp画像に変更して無事解決しましたとさ。
めでたしめでたし。
かなーーーりレアケースだと思いますが、完全に予想外の原因だったので備忘録でした。
「・・・フフ よく見ろサンジ・・・この忌まわしき・・・SVGファイルを!!!」

