- ベストアンサー
ファイルを出力させる方法
CGIを改造中です。 更新記録CGIなのですが、ログとは別に内容を別ファイルに書き出したいと思っています。 質問が大雑把かもしれませんが、まずはどういったことをする必要がありますか? とりあえず、ログ書き込みの後にサブルーチンを設定して、そこで書き出す内容をセットするのだとは思うのですが...
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
sub jsが、書き出す内容をセットするのではなく、直接書き出してしまっているのが問題ですね。 sub jsのなかで my $js; とかしておいて、 print "document.write~" の部分を $js .= "document.write~" のようにして $js 内にjsの内容を記録し、 sub jsの最後で return $js のようにすると、 my $log = &js; で$logにjsの内容がセットできると思います。
その他の回答 (4)
- flowermaze
- ベストアンサー率56% (159/282)
こんな感じですかね。 ---------------------------------- my $log = '書き出したい内容'; OPEN (JS, ">link.js"); print JS $log; CLOSE (JS); ---------------------------------- あとは、CGIの出力結果自体をjsにして <script src="CGIへのパス"></script> と呼び出す手もあると思いますが。
お礼
すみません。下部分が変になってます。 ----------- 別途サブルーチンを作成 sub js{ print"document.write('<div id=\'theme-sidebar\' title=\'LINKS\'>');\n"; print"document.write(' <h3 class=\'sidebar-cap\' title=\'LINKS\'>Links</h3>');\n"; print"document.write(' <div class=\'sidebar-body sidebar-theme_selector\' style=\'display: block;\'>');\n"; print"document.write(' <ul>');\n"; # ログファイル読み込み open (FILE, "$data") || &error("ファイルが開けません"); @data = <FILE>; close(FILE); # カウント除去 $count = shift (@data); $no = 0; foreach $data (@data) { ($no,$date,$year,$month,$day,$name,$url,$new) = split(/<>/,$data); chomp; print"document.write(' <li><a href=\'$url\' target=\'_blank\' title=\'$name\'>$name</a></li>');\n"; } print"document.write(' </ul>');\n"; print"document.write(' </div>');\n"; print"document.write('</div>');\n"; } ------------------------------------------------- こうすると、500エラーが帰ってきます。 「my $log = &js;」これが良くないような気がするのですが、どう変化させればいいでしょうか?
補足
返答ありがとうございます。 返事が遅くなってすみません。 以下のようにしてみましたが、うまく動作しません。 ----------------------------------------------- 登録ルーチンの最後あたりに以下を挿入 # .jsファイル書き出し my $log = &js; OPEN (JS, ">link.js"); print JS $log; CLOSE (JS); ----------- 別途サブルーチンを作成 sub js{ print"document.write('<div id=\'theme-sidebar\' title=\'LINKS\'>');\n"; print"document.write(' <h3 class=\'sidebar-cap\' title=\'LINKS\'>Links</h3>');\n"; print"document.write(' <div class=\'sidebar-body sidebar-theme_selector\' style=\'display: block;\'>');\n"; print"document.write(' <ul>');\n"; # ログファイル読み込み open (FILE, "$data") || &error("ファイルが開けません"); @data = <FILE>; close(FILE); # カウント除去 $count = shift (@data); $no = 0; foreach $data (@data) { ($no,$date,$year,$month,$day,$name,$url,$new) = split(/<>/,$data); chomp; ------------------------------------------------- こうすると、500エラーが帰ってきます。 「my $log = &js;」これが良くないような気がするのですが、どう変化させればいいでしょうか? print"document.write(' <li><a href=\'$url\' target=\'_blank\' title=\'$name\'>$name</a></li>');\n"; } print"document.write(' </ul>');\n"; print"document.write(' </div>');\n"; print"document.write('</div>');\n"; }
- bgbg
- ベストアンサー率53% (94/175)
大雑把に回答すると、 リンクを掲載したい位置に <script type="text/javascript" src="lik.js"><script> とscriptタグを入れておき、lik.jsは -------------------------------------------------- Content-type: text/javascript document.write(~~~~); document.write(~~~~); document.write(~~~~); -------------------------------------------------- という感じのJavaScriptソースを書き出すCGIにすれば良いでしょう。
- moon_night
- ベストアンサー率32% (598/1831)
大雑把すぎるので具体的な回答ができません・・・ 更新記録CGIは何を記録しているか? ログと内容はどのようなものか? まぁ、普通はopenを2回使って二つのファイルに別の内容を記録してやればいいと思いますが。 (サブルーチンは使っても使わなくてもいい)
補足
すみません。やっぱり大雑把過ぎました。 (急いでいたので、説明が足りませんでした) 自分で設置型のブログを公開しようとがんばっています。 いわゆる左メニュー部分にリンクを掲載しようと思っています。(改造が簡単なので、リンク集CGIでは無く更新記録CGIを使ってます) SSIを使って表示させようとしたのですが、どうも出来ないらしく、Javaスクリプトで表示させる方法しか見つかりませんでした。 で、その方法では外部に.jsファイルを置きそこを修正することで修正が可能になると言うものでした。 なので、管理はCGIに任せ、その結果を「lik.js」のようなファイルで出力したいと思っています。 と言うことで、実際どのように仕込んで言ったらよいでしょうか?
- KNIGHT11
- ベストアンサー率21% (82/376)
通常、printでブラウザにHTMLを書き出してますよね? 質問者様のお考え通り、そのprintの下にファイルのopen、print、closeでよいのでは? ※質問の内容を勘違いしているかもしれないので「自信なし」にしときました(^^;
補足
すみません。やっぱり大雑把過ぎました。 (急いでいたので、説明が足りませんでした) 自分で設置型のブログを公開しようとがんばっています。 いわゆる左メニュー部分にリンクを掲載しようと思っています。(改造が簡単なので、リンク集CGIでは無く更新記録CGIを使ってます) ととにを使って表示させようとしたのですが、どうも出来ないらしく、Javaスクリプトで表示させる方法しか見つかりませんでした。 で、その方法では外部に.jsファイルを置きそこを修正することで修正が可能になると言うものでした。 なので、管理はCGIに任せ、その結果を「lik.js」のようなファイルで出力したいと思っています。 と言うことで、実際どのように仕込んで言ったらよいでしょうか?
お礼
返答ありがとうございます。 なとかできました!