人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

perlで書かれたcgiスクリプトを実行すると、あるファイルがユーザーのテンポラリフォルダに保存されるようになっています。
このファイルをサーバーの中に保存させるためには、どのようにしたらよいでしょうか?
不躾な質問で恐縮ですが、ご見識のある方は、ご回答何卒よろしくお願い致します。

●質問者: Kenichi_S
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI Perl サーバー スクリプト テンポ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● k12u
●35ポイント

出力をサーバでやるにしてもCGIでやるからには何かを出力する必要があるので、とりあえず今まで書き出していたデータのMIMEタイプを指定していた部分があるはずなので(キーワードはcontent-type)そこをtext/htmlなどにして、アクセスしたいときに画面に表示させたいHTMLを出力しておきます。

kmlのコンテンツ($kml)を保存するにはサーバ上のしかるべきパス($filename)を指定して

open OUTPUT, "> $filename";

print OUTPUT $kml;

close OUTPUT;

という流れになるかと思います。

上の$kmlは今まで、

print $kml;

のようにして標準出力に出力していた部分に相当するものです。何かのライブラリだったりするとそのライブラリのドキュメントをあたらなければならないかもしれません。(大抵、print OUTPUT $kml_object->as_stringぐらいで済むと思いますが)

テンポラリフォルダに保存しているというよりもIEがデータを(ある意味透過的に,直接)再生しようとしていて、その際のキャッシュをテンポラリフォルダに保存しているという理解の仕方をしています。つまりこのとき起きている保存は副産物というわけです。

URLは参考程度で。

http://www.rfs.jp/sb/perl/02/08.html

◎質問者からの返答

ご回答ありがとうございます。

本当に困っていたので、大変助かります。

まず、仰られている「テンポラリ?」はまさにその通りだと思います。ご指摘頂いて、初めて気が付きました。

さて、コメントにお書きになられいましたようにデータの書き出しを行っている部分ですが、以下の通りだと思います。

print <<KML;</p>

<kml xmlns="http://earth.google.com/kml/2.0">

<Placemark>

$desc

<name>$title</name>

<styleUrl>root://styleMaps#default+nicon=0x304+hicon=0x314</styleUrl>

<Point>

<coordinates>$lng,$lat,0</coordinates>

</Point>

</Placemark>

</kml>

KML

print <<kmlの部分が書き出しを行っていると思うんですが、「<< 」の意味も分かりません。(文中の「</p>」は気になさらないで下さい。)教えて頂いたものを試してみます。結果は再度ご報告させて頂きます。

本当に素人で申し訳ありませんが、何かご指摘頂ければ幸いです。よろしくお願い申し上げます。


2 ● k12u
●35ポイント

これなら

($filenameは書き出したいファイル名を代入しておく)

open OUTPUT, "> $filename";

print OUTPUT <<KML;</p>

<kml xmlns="http://earth.google.com/kml/2.0">

省略

</kml>

KML

close OUTPUT;

のようにすれば$filenameに書き出せます。あとは1度目に回答したように、ブラウザに表示するHTMLを代わりに表示するようにすればよいと思います。ここで出力しているのに加えて

print <<CLIENTVIEW;</p>

<html>

表示するためのHTMLをここに書く

</html>

CLIENTVIEW

もしておきます。おそらく元々KMLのためのContent-Type(application/vnd.google-earth.kml+xmlかな)が設定してあると思いますが、それはtext/htmlに変えておきます。

"<<"はヒアドキュメントといって、"<<KML"は"KML"という文字列が次に見つかるまでを一連の文字列として扱って欲しい時に(主に改行を含む長文のテキストのために)使います。</p>

http://q.hatena.ne.jp/answer

</p>が追加されるのはバグなんですかねぇ。

◎質問者からの返答

大変丁寧なご回答ありがとうございます。

本当に勉強になります。

これから教えて頂いた方法でやってみます。

取り急ぎお礼までで、失礼いたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ