読者です 読者をやめる 読者になる 読者になる

$CGI::DISABLE_UPLOADS ではまった

CGI.pm で「$DISABLE_UPLOADS = 1;」として、ファイルのアップロードを無効にしておいたのを忘れて、アップロードを行う CGI を実行しようとしていた。この状態で、

my $q = new CGI;
my $file = $q->param('file')

としても、「$q->param('file')」の戻り値は undef になってしまう(何でundefになるかは調べてないけど)。


「CGI.pm の use 宣言よりあと、CGI.pmオブジェクトを作成するより前」に以下のコードを挿入すれば、アップロードを有効にできる。(参考:CGIプログラミングの p.100)

use constant MAX_FILE_SIZE => 1_024 ** 2;
$CGI::POST_MAX = MAX_FILE_SIZE;
$CGI::DISABLE_UPLOADS = 0;

アップロードを有効にするだけだったら、「$CGI::DISABLE_UPLOADS = 0;」だけで基本的に OK だけど、念のため、「$CGI::POST_MAX」も常に確認できるよう明示的に指定しておいた。

perldoc CGI より引用

$CGI::POST_MAX
If set to a non-negative integer, this variable puts a ceiling on the size of POSTings, in bytes. If CGI.pm detects a POST that is greater than the
ceiling, it will immediately exit with an error message. This value will affect both ordinary POSTs and multipart POSTs, meaning that it limits the
maximum size of file uploads as well. You should set this to a reasonably high value, such as 1 megabyte.