カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

PHP メモリーエラー

PHPでファイルを扱う中で、以下のようなエラーが発生することがあります。

Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in ...

ファイルの容量が大き過ぎて、PHPに割り当てられているメモリーの範囲を超えてしまっているのです。

php.iniに以下のような行がありますので、この値を変更してあげます。
デフォルトは8Mです。

memory_limit = 8M   ; Maximum amount of memory a script may consume (8MB)

おすすめはしませんが、-1とすると上限なしに設定できるようです。
変更したらapacheを再起動させてください。

php.iniが触れない場合や、基本的な上限は変えたくないときは一時的に変更します。

init_set("memory_limit", "16M");

もしくは.htaccessでも可能です。

php_value memory_limit 16M

以下の記事も参考にしてください
[ファイルアップロードの最大サイズを変更]

1,461 views

ブラウザの戻るでもフォームの値を保持する

HTMLでフォームを設置したとき、フォームに内容を入力し、内容確認などするようにしたところ、
ブラウザの戻るで入力画面に戻ると入力していた内容がクリアされてしまう、ということがあるかと思います。

ユーザービリティを考慮すると、入力した内容は残っていたほうがよい。
そこで以下のような方法があります。

PHPのセッションを使用している場合、session_start関数の前にsession_cache_limiter関数を実行します。
特にPHPのセッションを使っている場合はキャッシュが無効になっているようです。

session_cache_limiter("private_no_expire");
session_start();

キャッシュ指定をヘッダー出力

header("Cache-Control: Private\n");
10,073 views

getimagesize

$data = getimagesize($filename);
$data[0] = 幅
$data[1] = 高さ
$data[2] = 画像種類(gif:1,jpg:2)
$data[3] = 高さ="" 幅=""
$data["bits"] = ビット/ピクセル
$data["channels"] = チャンネル
$data["mime"] = MIMEタイプ
1,048 views

ファイルアップロードの最大サイズを変更

フォームよりアップロードできるファイルの最大容量を変更したいとき、
php.iniで以下の設定を変更します。

upload_max_filesize

1つのファイルアップロードに許可される最大サイズ
デフォルト:2M 40M

upload_max_filesize = 40M
post_max_size

POST送信できる最大サイズ
デフォルト:8M 40M

post_max_size = 40M
memory_limit

メモリ使用量の制限
デフォルト:128MB 512MB
-1にすると無制限

memory_limit = 512MB
max_execution_time

タイムアウト秒数
デフォルト:20 120
0にすると無制限

max_execution_time = 120
max_file_uploads

1回の送信で送れるファイルの個数
デフォルト:20
※こちらについてはphp.ini、もしくはApacheのhttpd.conf(extra/httpd-vhost.conf)でないと設定できません。

max_file_uploads = 150

memory_limitpost_max_sizeupload_max_filesizeについては以下のような関係になるよう設定してください。

memory_limit > post_max_size > upload_max_filesize

Apacheで設定する

<Directory "/var/www/html">
    php_value memory_limit 128M
    php_value max_execution_time 0
</Directory>

.htaccessファイルで設定することも可能です。

php_value memory_limit 128M
php_value max_execution_time 0

最後に

変更した後は忘れずにApacheを再起動しましょう。

2,732 views

PHP ファイルアップロードのエラー

ファイルアップロードのエラーについてまとめました。

フォームのサンプル

<form method="post" action="my.php" enctype="multipart/form-data">
    <input type="file" name="upfile" size="50"><br>
    <input name="submit" type="submit" value="アップロード">
</form>

PHPのサンプル

if ($_FILES["upfile"]["error"] == UPLOAD_ERR_OK)
{
    //アップロード成功
}
else
{
    //エラー発生
}

・エラーコードについて

UPLOAD_ERR_OK
値:0
エラーなし。ファイルアップロード成功。
続きを読む…»

3,455 views