サーバーのPHPメモリ上限(memory_limit)の変更方法。

php-メモリ上限(memory_limit)の変更方法_eyecatch

サーバーで動かすスクリプトの最大メモリ(memory_limit)の変更方法です。

PHPのmemory_limitの値はサーバー上にある「php.ini」や「.htaccess」を編集することで、比較的簡単に変更することが可能です。

Webサイトでメモリ不足のエラーが出てしまう時は、memory_limitの値を変更してメモリ上限を増やしてみて下さい。

基本的にPHPのmemory_limitの値は「php.ini」を編集して変更します。

サーバーのPHPメモリ制限(memory_limit)の変更方法

サーバーで動かすPHPスクリプトのメモリ使用量が、サーバー上の「php.ini」などで設定しているメモリ制限(memory_limit)の値を超えてしまった場合、以下のようなメモリ不足のエラーが発生します。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217736 bytes) in filename on line 3

このようなメモリ不足のエラーが出てしまう場合、スクリプト単位のメモリ制限(memory_limit)の設定値を変更することで解決できる可能性があります。

また、現在サーバーに使用されているメモリ制限(memory_limit)の値は、phpinfo関数を表示(実行)することで確認することができます。

 phpinfo.php
<?php
phpinfo();
?>

関連記事

php-メモリ上限(memory_limit)の変更方法_001

memory_limitはphpinfoなどで確認可能

phpinfoを実行したら、あとはCoreの欄でmemory_limitの項目を確認すればOK!
今回この128MBというメモリ制限(memory_limit)を512MBに増やしてみます。

メモリ制限(memory_limit)を変更する方法には以下のような方法があります。

  • php.iniを使う
  • .user.iniを使う
  • httpd.confを使う
  • .htaccessを使う
  • PHPのini_set()関数を使う

memory_limitなどのPHPの設定値(ディレクティブ)を変更する方法は上記のように複数ありますが、普通は「php.ini」または「.user.ini」を使います。

ではこちらの方法から早速やり方を見ていきましょう・w・

php.iniでmemory_limitを変更する方法

memory_limitなどの設定値はPHPに関係する値なので、普通は「php.ini」というiniファイルを使って変更します。一部の共有サーバーでは「php.ini」ファイルではなく「.user.ini」を使う環境のところもあります。

php-メモリ上限(memory_limit)の変更方法_002

基本的には公開ディレクトリ(public_html)内のphp.iniを編集すればOK

ほとんどのサーバーで「php.ini」は公開ディレクトリ(public_html)内に存在しているのではずなので、これを編集しましょう。

ポイント

  • php.iniが無く.user.iniだけが存在している場合は.user.iniを編集。
  • 両方ある場合はphp.iniから編集して効かなければ.user.iniを編集。
  • どちらのファイルもない場合はphp.iniを新規作成して編集すればOKです。

php.ini(.user.ini)を開いたら以下のコードを追記します。

 php.iniまたは.user.ini
memory_limit = 512M

ファイル内に「memory_limit = 〇〇」という記述があれば、これを半角セミコロン「;」でコメントアウトしておきましょう。コードは下の行、つまり後から書いた値が反映されますが一応無効化しておくのがお勧めです。

php-メモリ上限(memory_limit)の変更方法_003

コードの追記例

こんな感じに書けばOK!
これでPHPのメモリ制限(memory_limit)が変更されるはずなので、phpinfoなどで確認してみましょう。変更されていれば作業終了!お疲れさまでした。

参考

PHP-FPMを使っている共有サーバーでは最大5分待つ必要があります。
専用サーバー(VPS)やローカル環境の場合はサーバーの再起動が必要です。

スポンサーリンク

.htaccessでmemory_limitを変更する方法

続いて「.htaccess」を使ってメモリ制限(memory_limit)を変更するについて。

編集権限がない場合など、php.ini(.user.ini)が使えない場合は、サーバー上の「.htaccess」を使ってもmemory_limitの値を変更することが可能です。

php-メモリ上限(memory_limit)の変更方法_004

php.ini(.user.ini)が使えない時は.htaccessを使う

「.htaccess」を使う場合も公開ディレクトリ(public_html)内にある「.htaccess」を編集すればOKです。(ない場合は新規作成)

参考

「.htaccess」の設定は下層ディレクトリにも影響するという点に注意が必要。
また「.htaccess」は隠しファイルになっていることも多いのでこれも注意です。

「.htaccess」を開いたら以下のコードを追記しましょう。

 .htaccess
php_value memory_limit 512M

先ほどのphp.iniや.user.iniの時と記述するコードが異なるのでご注意下さい。

php-メモリ上限(memory_limit)の変更方法_005

ややこしければファイルの先頭にコードを追記しよう

こんな感じにコードを追記すればOKです。
特にこだわりが無ければ「.htaccess」の先頭にコードを追記すれば反映されます。

その他の方法でmemory_limitを変更する方法

スタンダードなのは「php.ini」や「.user.ini」というiniファイルを使う方法。
iniファイルが使えない場合は「.htaccess」を使ってもメモリ上限(memory_limit)の設定値を変更することが可能です。

普通は上記の方法で十分だと思いますが、その他の方法についても書いておきます。

httpd.confを使う方法

Apacheの設定ファイルである「httpd.conf」を使ってもPHPの設定値を変更することができます。この場合は「.htaccess」と同様で、

 httpd.conf
php_value memory_limit 512M

という記述を「httpd.conf」に書けばOKです。

しかしファイルの役割上、多くの共有サーバーでは「httpd.conf」を編集するためのルート権限が無いので、この方法でmemory_limitを変更するのはレアケースです。

ini_set()関数を使う方法

最後にini_set()関数を使ってmemory_limitを変更する方法について。
一応PHPの関数であるini_set()を使えば、PHPの設定値を変更することができます。

この場合はPHPファイル内のコードに直接関数を書きます。

 sample.php
<?php
ini_set('memory_limit', '512M');
~以降何かのコード~
?>

こんな感じに書いておけば、sample.phpを実行した時にmemory_limitの値が512MBになります。ただし、スクリプトごとにmemory_limitを割り当てるのは保守性の面で後々面倒になると思うので極力使わないようにしたい方法です。

メモリ制限(memory_limit)が変更されたか確認する

いずれかの方法でPHPのスクリプト当たりのメモリ制限(memory_limit)の変更ができたら、再度phpinfoを実行して値が変更されているか確認しておきましょう。

php-メモリ上限(memory_limit)の変更方法_006

“Local Value”が実際に使用される値なので、こんな感じになっていればOKです。

当記事の方法でメモリ制限(memory_limit)の値は変更できますが、サーバー自体のメモリが足りていないと制限を変更しても意味がありません。変更後もメモリ不足のエラーが出る時は、レンタルサーバーの場合はプランを上位プランに変更することも検討しましょう...。

memory_limitが変更されない時の確認

ここまでの方法でmemory_limitの値は変更できると思いますが、何らかの原因でmemory_limitの設定値がLocal Valueに反映されないというケースも多々あります。

考えられる原因の1つはPHPの設定値(ディレクティブ)の読み込み優先度です。
例えば「php.ini」よりも「.htaccess」の方が優先度が高いので、どちらのファイルにも同じコードがある場合は「.htaccess」の値が優先されるといった具合です。

詳しくは別の記事に詳しくまとめたので、以下の関連記事をご参考下さい。

phpの設定値(ディレクティブ)の優先順位_eyecatch
PHPの設定値(ディレクディブ)の優先順位。最終的に反映されるのはどのファイル?

続きを見る

もう1つmemory_limitが変更されない原因としてありそうなのは単位の表記です。
memory_limitのオプションについてはPHPの公式サイトに説明があります。

有効なオプションは K(キロバイト)、M(メガバイト)および G(ギガバイト) です。これらはすべて、大文字小文字を区別しません。 これ以外の文字はバイト値と判断されます。 1M は、1 メガバイトあるいは 1048576 バイトと等しくなります。1K は、1 キロバイトあるいは 1024 バイトです。この表記法は、 php.ini や ini_set() 関数で使えます。 ここで、数値の値は、int 型にキャストされることに注意して下さい。 たとえば、0.5M は 0 と解釈されます。

「512M」と書くところを「512MB」と書いていると無効な値とされて無視されます。「B(バイト)」は不要な点に気を付けて下さい。0.xという書き方がint型にキャストされて扱われることがあるのも注意ポイントです。



まとめ

以上、サーバーのメモリ制限(memory_limit)を変更して増やす方法でした。

最後に、memory_limitの値に「-1」を指定するとスクリプト単位のメモリ制限を無くすことができます。が、プログラムにミスがあるとメモリを食い尽くしてしまうことになるので、ある程度の制限は設定しておくのが良いでしょう。

メモリ不足のエラーが発生している方は当記事を参考にメモリ制限を引き上げてみて下さい!!ではではこのへんで・w・

-サイト構築
-,

site-logo
ありがとうございました!
良かったらシェアしてネ・w・
当サイトはピンバックを受け付けます。
  • この記事を書いた人
ザキ

ザキ

X:@sologaku

プログラミングに興味があり情報系の大学を卒業。

新卒で社会人になるも数年で退職し今はフリーランスとして生きています。

少しでも誰かの役に立てれば...と思い、当サイトでIT関係のハウツーを発信しています。


ソロ学運営者:ザキの自己紹介

© 2020 sologaku