perlで書かれたcgiスクリプトを実行すると、あるファイルがユーザーのテンポラリフォルダに保存されるようになっています。

このファイルをサーバーの中に保存させるためには、どのようにしたらよいでしょうか?
不躾な質問で恐縮ですが、ご見識のある方は、ご回答何卒よろしくお願い致します。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:2006/10/05 20:50:05
  • 終了:2006/10/12 20:50:08

回答(2件)

id:k12u No.1

k12u回答回数80ベストアンサー獲得回数72006/10/08 13:13:21

ポイント35pt

出力をサーバでやるにしても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

id:Kenichi_S

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

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

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

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

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>」は気になさらないで下さい。)教えて頂いたものを試してみます。結果は再度ご報告させて頂きます。

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

2006/10/09 02:12:21
id:k12u No.2

k12u回答回数80ベストアンサー獲得回数72006/10/10 15:41:14

ポイント35pt

これなら

($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>が追加されるのはバグなんですかねぇ。

id:Kenichi_S

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

本当に勉強になります。

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

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

2006/10/12 09:36:53
  • id:tikirou
    ファイルとは具体的に何でしょうか?
    意図的にCGIからユーザーのテンポラリに
    ファイルを作成することは出来ないはずですので
    キャッシュとかの気が・・・。
  • id:Kenichi_S
    早速のコメントありがとうございます。
    ファイルはGoogel Earthのkmlファイルです。
    Googel Mapから緯度経度を取得して、自分の取りたいポイントでボタンを押すと、kmlファイルを自動生成され、ユーザーのテンポラリに保存され、Googel Earthが起動するようになっています。このスクリプトは頂きもので、それを使用させて頂いているだけですので、どうやってテンポラリに保存させているかも、よく分からない状態です(初心者ですみません)。
    これで回答になりましたでしょうか?
    もし、何かご存知でしたら、ご指摘頂きたく思います。よろしくお願い致します。
  • id:k12u
    回答に補足します。データを書き出していると思われる部分が見えるだけでかなり回答がしやすくなるかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません