postされた生データを取得する
2007-08-09-1 / カテゴリ: [CGI][perl] / [permlink]
use CGI; my $q = new CGI; my $buf = $q->param('POSTDATA');でゲット。
ただし、メソッドがpostでかつ、リクエストヘッダの Content-type が application/x-www-form-urlencoded でも multipart/form-data でもないとき。
HANDLING NON-URLENCODED ARGUMENTS
加えて、Content-type リクエストヘッダがない場合も読めないっぽい。
結局、<STDIN> を読むのが手っ取り早いかな…
POST されるデータサイズの制限
2005-09-21-1 / カテゴリ: [programming][CGI][perl] / [permlink]
CGI.pm では、$CGI::POST_MAX に値(byte単位)を設定することで、そのサイズを超えた POST データのハンドリングができる。
指定サイズを超えるデータが POST された場合は、cgi_error() にエラーメッセージがセットされるので、
$CGI::POST_MAX = 1024 * 1024 * 5; # 5MB $obj_cgi = new CGI; :CGI を new するより前にセットしないと無効。
指定サイズを超えるデータが POST された場合は、cgi_error() にエラーメッセージがセットされるので、
if ($msg = $obj_cgi->cgi_error) { print "Error: ", $msg, "\n"; exit; }みたいなかんじで。
chalow ラッパー CGI (ChangeLog to HTML)
2005-06-06-1 / カテゴリ: [perl][programming][changelog][CGI][chalow] / [permlink]
[2005-06-03-1] のやつ。
まず、CGI でファイルアップローダ(chlogup.cgi)をテキトーに作成
で、ChangeLog をさくらへ up し、chalow を実行するシェルスクリプト(exec.sh)を作成
CGI を呼ぶ HTML もテキトーに。
さくらのサーバ上の ~/local/chalow 以下に chalow があるのが前提。
あとは、https でアクセスできるサーバにおいて、BASIC認証なりなんなりで制限すればいい(httpsなんでBASIC認証で十分でしょ)
まず、CGI でファイルアップローダ(chlogup.cgi)をテキトーに作成
#!/usr/bin/perl use CGI; my $cgi = new CGI; my $updata = $cgi->param('file'); my $chfile = "ChangeLog"; print $cgi->header('text/plain'); unless (open F, "> $chfile") { print "open error $chfile: $!\n"; exit 1; } while (<$updata>) { print F; } close F; print "exec chalow start\n"; print `/foo/bar/exec.sh 2>&1`; print "exec chalow done\n";
で、ChangeLog をさくらへ up し、chalow を実行するシェルスクリプト(exec.sh)を作成
#!/bin/sh /bin/cat ChangeLog | /usr/bin/ssh -i sshの鍵 username@sakura 'cat | env PERL5LIB=local/chalow/ local/chalow/chalow -c local/chalow/cl.conf -o www/changelog -'
CGI を呼ぶ HTML もテキトーに。
<html> <body> <form action="chlogup.cgi" method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit"> </form> </body> </html>
さくらのサーバ上の ~/local/chalow 以下に chalow があるのが前提。
あとは、https でアクセスできるサーバにおいて、BASIC認証なりなんなりで制限すればいい(httpsなんでBASIC認証で十分でしょ)
Webしかアクセスできない環境からの chalow 更新方法の考察
2005-06-03-1 / カテゴリ: [diary][changelog][CGI][chalow] / [permlink]
平たく言うと、会社から update できないかな〜、と。
会社のインターネットへの接続は Web のみで http proxy は 80 と 443 しか空いてなく、さくらのサーバは https は利用不可。Digest 認証も使用できない[2005-05-29-1]ので「Webアップローダから ChangeLog をアップして、CGI 使って chalow 実行」もできない。Basic 認証じゃパスがつつぬけだから、js と CGI でワンタイムパスワード認証するプログラムでも作って…面白そうではあるが、さすがにメンドイぞ。
あ、自宅サーバという手(抜け道)があった。自宅なら https 上がってるから、そっちに Web アップローダ置いて、バックグラウンドで ssh でさくらへ接続・chalow 実行ってやればクリアできそう。
つか、自宅で chalow 実行して、生成 html だけさくらへ転送すれば、ChangeLog を置かなくて良いじゃん…(private や仕事的な内容を外に一瞬でも置かなくて済む)
会社のインターネットへの接続は Web のみで http proxy は 80 と 443 しか空いてなく、さくらのサーバは https は利用不可。Digest 認証も使用できない[2005-05-29-1]ので「Webアップローダから ChangeLog をアップして、CGI 使って chalow 実行」もできない。Basic 認証じゃパスがつつぬけだから、js と CGI でワンタイムパスワード認証するプログラムでも作って…面白そうではあるが、さすがにメンドイぞ。
あ、自宅サーバという手(抜け道)があった。自宅なら https 上がってるから、そっちに Web アップローダ置いて、バックグラウンドで ssh でさくらへ接続・chalow 実行ってやればクリアできそう。
つか、自宅で chalow 実行して、生成 html だけさくらへ転送すれば、ChangeLog を置かなくて良いじゃん…(private や仕事的な内容を外に一瞬でも置かなくて済む)
Referrer (Inside):
[2005-06-06-1]
use CGI での未定義
2004-10-07-1 / カテゴリ: [programming][perl][CGI] / [permlink]
my $hoge = $query->param('hoge');で取得した場合、
?hoge=xx
は当然 xx
?hoge=
は空文字(defined)
なにもなければ
undef
になる
CGI/Fork (Apache2)
2004-05-06-5 / カテゴリ: [Apache][CGI] / [permlink]
Content-Length ヘッダのほかに、
「子プロセスで STDOUT を close してはいけない」
ようだ。(親プロセスは close しても動作に違いはない)
場合によっては、下記の KeepAlive を無効にする必要もあり。
「子プロセスで STDOUT を close してはいけない」
ようだ。(親プロセスは close しても動作に違いはない)
場合によっては、下記の KeepAlive を無効にする必要もあり。
KeepAlive の無効化 (Apache2)
2004-05-06-4 / カテゴリ: [Apache][CGI] / [permlink]
print "Connection: close\n";を HTTP ヘッダにいれとく
Apache2 文字化け関連
2004-05-06-1 / カテゴリ: [Apache][CGI] / [permlink]
AddDefaultCharset を無効にするか、
index.html.var に
index.html.ja.euc-jp に euc-jp でファイルを記述する。
.euc-jp は必須(httpd.conf参照)
CGI の場合は、
index.html.var に
URI: index.html.ja.euc-jp Content-language: ja Content-type: text/html;charset=EUC-JPみたいに記述し、
index.html.ja.euc-jp に euc-jp でファイルを記述する。
.euc-jp は必須(httpd.conf参照)
CGI の場合は、
"Content-type: text/html; charset=EUC-JP\n\n"を出力しておけばよい
forkで重いプログラムのするcgiがApache2でうごかない件
2004-04-27-1 / カテゴリ: [Apache][CGI] / [permlink]
http://mm.apache.or.jp/pipermail/apache-users/2003-November/003529.html
からのスレッドをたどる
http://mm.apache.or.jp/pipermail/apache-users/2003-November/003531.html
が答え
からのスレッドをたどる
http://mm.apache.or.jp/pipermail/apache-users/2003-November/003531.html
が答え
print "Content-Type: text/html\n"; print "Content-Length: 6\n\ntest.\n";と、Content-Length を加えると、とりあえず表示されるぽい
オープンした画像ファイルをCGIで表示
2004-04-02-1 / カテゴリ: [programming][perl][CGI] / [permlink]
print "Content-type: application/octet-stream\n\n"; open(F, "gazou.xxx"); binmode(F); print while(<F>); close(F);
最終更新時間: 2013-05-02 16:12