« GNOMEターミナルのSolarized化 | トップページ | vim起動時に「E568: duplicate cscope database not added」 »

2012年10月 1日

PHPで2MB以上のファイルをアップロード

PHPはデフォルトで2MB以上のファイルがアップロードできない。この上限を変更する方法は2つある。

システム全体で上限を変更

/etc/php.iniのupload_max_filesizeを変更する。

$ php -f phpinfo.php | grep max
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads. file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir =
; Maximum allowed size for uploaded files. ;upload_max_filesize = 2M upload_max_filesize = 10M

アップロード上限に応じて、post_max_size、max_execution_time、memory_limitも大きくする必要がある。

現在の設定値はphpinfo()で確認できる。

$ cat phpinfo.php
<?php
echo phpinfo();
?>
$ php -f phpinfo.php | grep max
log_errors_max_len => 1024 => 1024
max_execution_time => 0 => 30
max_file_uploads => 20 => 20
max_input_nesting_level => 64 => 64
max_input_time => -1 => 60
max_input_vars => 1000 => 1000
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
session.gc_maxlifetime => 1440 => 1440

Apacheのディレクトリごとに設定

アップロード上限を変更したいディレクトリに.htaccessファイルを置き、以下の設定値を変更する。メモリ上限などの設定値は適当である。

php_value max_execution_time 60
php_value memory_limit 10M
php_value post_max_size 10M
php_value upload_max_filesize 10M

.htaccessによるアクセス制限の上書きはApacheのデフォルトで禁止されている。httpd.confのAllowOverrideディレクティブ(デフォルトNone)を変更して許可する。

# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride All

(参考資料)
PHP: コア php.ini ディレクティブに関する説明 - Manual
http://php.net/manual/ja/ini.core.php#ini.upload-max-filesize

@IT:Apache 2.0の必須設定と基本セキュリティ対策(3/3)
http://www.atmarkit.co.jp/flinux/rensai/apache2_01/apache01c.html

Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ
https://httpd.apache.org/docs/current/ja/howto/htaccess.html

|

« GNOMEターミナルのSolarized化 | トップページ | vim起動時に「E568: duplicate cscope database not added」 »

コメント

この記事へのコメントは終了しました。