質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

492閲覧

特定のディレクトリ配下でメモリ利用量を制限したい

hotta

総合スコア1613

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/08/31 08:14

以下のような環境です。

bash

1vagrant@ns1:~$ cat /etc/system-release 2CentOS release 6.9 (Final) 3 4vagrant@ns1:~$ rpm -qa|grep -E '^(php|http)' | sort 5httpd-2.2.15-60.el6.centos.5.x86_64 6httpd-tools-2.2.15-60.el6.centos.5.x86_64 7php-5.3.3-49.el6.x86_64 8php-cli-5.3.3-49.el6.x86_64 9php-common-5.3.3-49.el6.x86_64 10php-gd-5.3.3-49.el6.x86_64 11php-mbstring-5.3.3-49.el6.x86_64 12php-pdo-5.3.3-49.el6.x86_64 13php-pear-1.9.4-5.el6.noarch 14php-pgsql-5.3.3-49.el6.x86_64 15php-xml-5.3.3-49.el6.x86_64 16 17vagrant@ns1:~$ grep memory_limit /etc/php.ini 18memory_limit = 128M 19 20vagrant@ns1:~$ tail -3 /etc/httpd/conf/httpd.conf 21<Directory /var/www/html/limited> 22 php_value memory_limit 64MB 23</Directory>

/etc/php.ini は何もいじらずに、httpd.conf に3行追加することで、memory_limit を特定の箇所だけ制限するという実験をしていてハマりましたw

bash

1root@ns1:/var/www/html# cat memory.php 2<?php 3echo "We are at ".__FILE__.'<br>'.PHP_EOL; 4echo "memory_limit = ".ini_get("memory_limit").'<br>'.PHP_EOL; 5root@ns1:/var/www/html# cat safe/memory.php 6<?php 7echo "We are at ".__FILE__.'<br>'.PHP_EOL; 8echo "memory_limit = ".ini_get("memory_limit").'<br>'.PHP_EOL; 9root@ns1:/var/www/html# cat limited/memory.php 10<?php 11echo "We are at ".__FILE__.'<br>'.PHP_EOL; 12echo "memory_limit = ".ini_get("memory_limit").'<br>'.PHP_EOL;

memory.php というファイルを3箇所に置いて、それぞれ呼び出します。

bash

1vagrant@ns1:~$ curl http://localhost/memory.php 2We are at /var/www/html/memory.php<br> 3memory_limit = 128M<br> 4 5vagrant@ns1:~$ curl http://localhost/safe/memory.php 6We are at /var/www/html/safe/memory.php<br> 7memory_limit = 128M<br> 8 9vagrant@ns1:~$ curl http://localhost/limited/memory.php 10死亡、、、(´・ω・`) 11 12root@ns1:/var/www/html/limited# tail -1 /var/log/httpd/error_log 13[Thu Aug 31 16:59:21 2017] [error] [client ::1] PHP Fatal error: Allowed memory size of 262144 bytes exhausted (tried to allocate 523800 bytes) in Unknown on line 0 14 15(CLIでやると) 16root@ns1:/var/www/html/limited# php memory.php 17We are at /var/www/html/limited/memory.php<br> 18memory_limit = 128M<br> 19(これは Apache を通らないのでデフォルトのままでOK)

なんか心当たりがありましたらお願いします。バグ踏んじゃったかなぁ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

memory_limit integer/K,M,G短縮表記となってます。
下記のように64MB → 64Mではどうでしょう?

apache

1/etc/httpd/conf/httpd.conf 2<Directory /var/www/html/limited> 3 php_value memory_limit 64M 4</Directory>

投稿2017/08/31 11:20

Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hotta

2017/09/01 00:01

これは我ながら、やってしまいましたね~♪ "M" が無視されて、64MB == 64 byte と換算されているのかなぁ。 悔しいので上記の想定で実験してみたところ、 php_value memory_limit 102400MB(約100KB?)はダウン php_value memory_limit 1024000MB(約1MB?)はOK この状態で表示すると、 vagrant@ns1:~$ curl http://localhost/limited/memory.php We are at /var/www/html/limited/memory.php<br> memory_limit = 1024000MB<br> VMにメモリ1GBしか割り当ててないのに、これはひどい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問