【Fatal error: Out of memory】WordPressのテーマエディタがメモリオーバーで壊れた…

Web関連
Web関連

こんばんは。

今回はシャーロット・プリンも幸せになるレベルの備忘録です。

 

 

ある日突然、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ファイルを!!!

 

 

タイトルとURLをコピーしました