Hatena::ブログ(Diary)

めざせ言語マスター このページをアンテナに追加 RSSフィード

2011-02-17

php.iniの設定を変えてもファイルをアップロードできないケース

PHPでファイルがアップロードできない場合は、まずphp.iniの下記の設定を疑います。


ディレクティブ名説明
upload_max_filesizeアップロードされるファイルの最大サイズ

アップロードしたいファイルサイズがupload_max_filesizeを超えていたら、それはもうアップロードできません。

そんな時はupload_max_filesizeの設定値を増やしてあげればいいのです。

ただし、この値の変更時は、下記2つの設定値にも注意する必要があります。


ディレクティブ名説明
memory_limitスクリプトが確保できる最大メモリ
post_max_sizePOSTデータに許可される最大サイズ

上記3つの項目が下記のような関係になるように設定しなければいけません。

memory_limit >= post_max_size >= upload_max_filesize


設定値を変える方法はいくつかあります。

例として、ファイルサイズを30MBまで許容する設定にします。

php.iniを直接編集する

/etc/php.ini(保存場所は違う可能性があります)を直接編集します。

実際はこんな風に綺麗に3行並んでません。

memory_limit = 40M
post_max_size = 32M
upload_max_filesize = 32M

.htaccessで設定値をオーバーライドする

対象のディレクトリ.htaccessに下記を記述します。

php_valueであり、php_flagではないので注意!

php_value memory_limit 40M
php_value post_max_size 32M
php_value upload_max_filesize 32M

ini_set関数を使う

ファイルをアップロードするスクリプト内にini_set関数を記述します。

値を○Mと記述する場合は文字列にします。

<?php
ini_set('memory_limit', '40M');
ini_set('post_max_size', '32M');
ini_set('upload_max_filesize', '32M');

これでもダメな場合・・・が、今回ぶち当たった問題でした。

と言っても、原因はあっさりしたもので、サーバ会社側で制限をかけているというだけだったわけですが。

今回のサーバは、WebARENAのSuiteXというプランでした。

よくよく調べたらマニュアルにも書いてありましたね。


というなんともオチが弱く、upload_max_filesizeの設定なんてググればいくらでも同じような内容が出てくるのにまとめた超自己満な内容でした。

まぁまた次同じようなことが起こった時に、可能性の一つとして視野に入れることができれば十分です。


しかし、サーバ会社側ではどうやって制限をかけてるんでしょうか。

解決して満足したので、そこまで調べる気にはなりませんでした(゚∀゚)

mountain91074mountain91074 2014/02/05 21:27 参考になりました。有難うございます。
僕が借りているサーバーで下記を試すと72Mで死にました。
サーバーごとに上限ってあるんですね。やっぱり。
ini_set('memory_limit', '200M');
$x = '';
while(true) {
echo "not real: ".(memory_get_peak_usage(false)/1024/1024)." MiB\n";
echo "real: ".(memory_get_peak_usage(true)/1024/1024)." MiB\n\n";
$x .= str_repeat(' ', 1024*25); //store 25kb more to string
}