WordPressを使ってるとたまに「allowed memory size of bytes exhausted (tried to allocate bytes)」みたいなエラーがでることがある。
エラーが起きた場所は、functions.phpの5177行目ということでこれを見ると
1 2 3 4 5 6 |
function wp_is_stream( $path ) { $wrappers = stream_get_wrappers(); $wrappers_re = '(' . join('|', $wrappers) . ')'; return preg_match( "!^$wrappers_re://!", $path ) === 1; } |
こんなことが書かれている。
一応PHPはアップデートしてみたものの、何かそれでは解決しない模様。色々調べてると、Windows系のPHP?Apache?で発生してるとか
色々見てると、https://core.trac.wordpress.org/ticket/43054ここら変に似た症状らしきものが、、、これによるとstream_get_wrappersがどうもアスキー外の文字を返すということらしい、、、
つまるところ、stream_get_wrappers()で返ってくる値が少々おかしい場合があって、その後のjoinあたりでどうも文字列終端NULLまでのメモリ確保が大量のメモリを必要としてしまうことが発生しているように思える。
https://bugs.php.net/bug.php?id=72451#1484148428こちらに解決方法?でjoinのstream_get_wrappersつかわず固定文字列で書いちゃえ的なのがあったので、とりあえずこんな感じに直してみた。
1 2 3 4 5 6 7 8 |
function wp_is_stream( $path ) { // $wrappers = stream_get_wrappers(); // $wrappers_re = '(' . join('|', $wrappers) . ')'; // var_dump( $wrappers_re ); $wrappers_re = "(php|file|glob|data|http|ftp|zip|compress.zlib|https|ftps|phar)"; return preg_match( "!^$wrappers_re://!", $path ) === 1; } |
なんか適当すぎる気もしないでもないが、、、