環境変数を表示せずに ファイル書き込むには?
[上に]
[前に]
[次に]
w
1999/03/17(水) 22:41:44
UNIXサーバー上で ENVコマンド使うさい 表示せずに
ファイル書き込むには?
w
1999/03/17(水) 22:52:43
追加 UNIXサーバー内で ENVコマンド使うさい IEブラウザからアクセスして環境変数を表示せず サーバー内で cgiを使って
環境変数をファイルに書き込む方法はありますか?
\n
1999/03/17(水) 23:16:48
Q1:
サーバーOSによっても違いますが、TELNETでという事ですよね。
set > filename
Q2:
例えば、
#!/usr/bin/sh
set > filname
echo "Content-type: text/html"
echo
echo
echo "<HTML><BODY>"
echo "<A HREF=\"filname\">filename</A>"
echo "</BODY></HTML>"
なんてのは?
\n
1999/03/17(水) 23:18:32
失礼、envでしたね。(^^)
いいづか
[HomePage]
1999/03/18(木) 01:27:47
Perlならこう:
#!/usr/local/bin/perl
print "Content-length:text/plain\n\n";
open ( E, ">env.txt" );
while ( ( $key,$value) = each %ENV ) { print E "$key = $value\n";}
close (E);
シェルならこう:
#!/bin/sh
echo "Content-type: text/plain"
echo
set > env.txt
w
[HomePage]
1999/03/18(木) 21:43:02
http://www.cypress.ne.jp/mituru/cgi-bin/time.cgi で表示しますが 表示せずにhtmlの文字すべてをそのまま テキストに書き込みたいのです どうですか お願いします
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<title> Print ENV </title>";
print "<H3>CGI program - print env- </H3>";
print `date`;
print "\n<PRE>\n";
print `env`;
print "\n<PRE>\n";
これを 改良したいのですが
B-Cus
1999/03/18(木) 21:46:30
せっかく答えを書いてもらったのに、それに関して全く反応を示さないのは
どうかと思うのですが。わからないところがあるなら、どこがわからないのかを
言うべきでは?
# ここは添削コーナーじゃないんだし。
w
1999/03/18(木) 23:03:03
うまくいきませんでした お詫びします このことは なかったことに してください
\n
1999/03/18(木) 23:59:21
># ここは添削コーナーじゃないんだし。
まあまあ、文字だけの会話ではよくある事だし....
ちなみにCGIを実行させてあと、リクエスト元には何を返すのですか?
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html>";
print "<title> Print ENV </title>";
print "<H3>CGI program - print env- </H3>";
$_=`date;env`;
open (OUT,">log"); #あらかじめ作成しておいて書込み権を与える
print OUT "$_\n";
close;
print "</html>";
こんなんではどうでしょう。
後は適当に改造して下さい。
#アクセス時の環境をログにしたいのでしょうか?
#目的が今一わからん
やま
1999/03/19(金) 00:19:57
いまいち何を質問されたいのか、よくわからん
B-Cus
1999/03/19(金) 01:24:34
> まあまあ、文字だけの会話ではよくある事だし....
ちょっと言葉足らずだったので補足しますが、言いたかったのは
「解決策を提示されたら試してみて報告くらいはしてくれ」
ということです。動かないというなら、それはそれで代案も出せる
わけで。
# あれで動かないなら、残るはパーミッションの問題でしょうから。
ですから、
「やってみたんですが、ファイルは作成されませんでした」
くらい書いてねっつーことです>wさん
添削wです
1999/03/19(金) 20:43:12
ご迷惑おかけしました B−Cusさんのキツイ一撃よくききました 皆様 なんとか 皆様のお力添えを無にならないように 努力して
いい結果を出したいと思います
ちなみに time.cgiはアクセスできません
いいづか
1999/03/20(土) 02:48:03
env コマンドと date コマンドにこだわる必要はないのでは?
Perlなら同等のことをする命令語があるので、起動プロセス数
を減らすためにPerlで普通に書いた方がいいと思います。
やりたいことは「環境変数と日付をファイルに書く」という
ことであり、「envコマンドとdateコマンドの結果をファイルに
書く」ということではないんじゃないかと思います(違ったらごめん)。
たとえば、Perlでは%ENVハッシュに環境変数が入っているので、
これを順に取り出せばいい訳です。また、dateの所は
フォーマットを気にしなければ以下のスクリプトでもいいはずです。
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900; $mon += 1;
$結果 = sprintf ( "%04d/%02d/%02d %02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec );
ところで、例のスクリプト(元のやつと直したやつ)を実行
するとどういう結果になりますか?
w
1999/03/20(土) 21:56:38
あのう すいません これだけは解っています 複雑な bbsやゲストブック またカウンタは作動済みで unixの サーバー内(perl4)ファイルの書き込みは出来るのですが 間単に作成した cgiファイルだめなんです 皆さんに頂いた代案を一つ一つもう一度チェックしてみて 解決したいと思います
#例の件は作動しませんでした #目的が今一わからん##特に たいした目的は有りません #アクセス時の環境をログにしたいのでしょうか? ##そうです
# あれで動かないなら、残るはパーミッションの問題でしょうから。##cgi=755 logファイル=666です
B-Cus
1999/03/21(日) 00:56:38
これは動きますか?
print "Content-type: text/plain\n\n";
if ( ! open (OUT,">file") ){
print "error";exit;
}
print OUT "hoge\n";
close(OUT);
open (IN,"file");
print <IN>;
hogeと表示されればOK。errorと表示されれば、fileのパーミッションの問題。
次。これは動きますか?
print "Content-type: text/plain\n\n";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
printf "%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
日付と時刻が表示されればOK。
どちらも動けば、組み合わせて、
print "Content-type: text/plain\n\n";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
open (OUT,">file");
printf OUT "%04d/%02d/%02d %02d:%02d:%02d",$year+1900,$mon+1,$mday,$hour,$min,$sec;
close(OUT);
print "hoge";
でOK。
CGIの仕組み上、何か文字を出力しないといけないので、
print "hoge"を省いてはいけません。
あと、読みやすいように改行しましょう。
それから「動作しません」というのは情報として全く不十分です。
Internal Server Errorになるとか、ファイルには何も書き込まれないとか
No contains data と出るとか、「何がどういうふうに動作しないのか」を
書いてください。
w
1999/03/21(日) 15:08:58
[[解決]]
解決しました 皆さんのおかげです P-Cusさんうまく行きました 感謝 感激です また なにか 疑問が有りましたら ご相談に乗ってください
[上に]
[前に]
[次に]