• 締切済み

ローカルファイルをサーバーから指定するには?

はじめまして ローカルに置いているxmlファイルを解析するcgi を作成中ですが、フォームでローカルファイルのディレクトリを絶対パスで書いてもらい、それを変数に渡してOpen しようとすると、 died で開くことができません。。フォームで記入してもらったデータはデコードして、C:\sample.txt のように変換できたところまでは確認したのですが、なぜかopenするところで、died で終了してしまいます。 何か方法があるのではと、探していたのですが、見つからず、こちらに相談することにしました。 どうぞよろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数2

みんなの回答

  • rentahero
  • ベストアンサー率53% (182/342)
回答No.2

まず。ローカルのファイルをサーバーがopenするということはありえません。そんなことできたらウィルスでもトロイでも置き放題になってしまいます。ということで、まず原理より。 inputタグで、type="file"にすると、ファイルを指定するダイアログをあけることができます。これは、画面上では絶対パスを表示しますが、実際にはファイルをPOSTでアップロードします。cgiが受け取ったら、デコードすれば受け取ったファイルを再現できます。 ローカルのファイルをcgiをつかって取得するプログラムはよくあります。例えば画像アップロード型の掲示板などがそうです。 なんとかやってみたいということであれば、あなたの使っている言語と同じ(たとえばperlならperlのもの)言語で書かれている、画像アップロード掲示板のスクリプトを探してみてください。結構いろいろと公開されています。 がんばってください。 参考URLには<input type="file">についての説明のページを入れておきます。

参考URL:
http://www.mitsue.co.jp/case/design/h_170.html
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

????  ファイルアップロードでやってる? それとも、ひょっとしてファイル名をサーバに渡してる? ローカルにあるファイルの「ファイル名」をサーバに送っても、それはサーバでは「オープン」できんやんね。記入された絶対パスではサーバにはそのファイルが存在しないし。サーバは、ローカルの「ファイル名」じゃなくて、「ファイルの中身」が欲しいんだから。  ファイルはどっちにあるの? ローカル? サーバ? ローカル側にのみ存在するファイルをサーバで開く事は絶対にできん。

starbucker
質問者

お礼

お礼を忘れておりました。 早速にお返事いただき、ありがとうございます。 とても助かりました。

starbucker
質問者

補足

ファイルはローカル側のみです。 やはりそうでしたか・・・そうですよね、サーバーはどこのCドライブか分かりませんものね。。 何か特別な方法があるのでは、、と思ったのですが、、 サーバーのあるディレクトリへ一度転送してもらって、というこで解決しようと思います。

関連するQ&A

  • ファイルを自動生成させたいのですが・・・

    すいません初心者ですが・・・ 設置しているCGIと同じディレクトリに「test.txt」というファイルを生成したい場合、 CGIに、 open IN, ">test.txt"; close IN; と記述しましたが、test.txtが生成されません。 何か問題があるのでしょうか? 最終的には、すでにtest.txtと言うファイルが存在しない場合はなにもせず、 、存在しない場合はtest.txt(読み書き可能のファイル)を自動生成するような仕組みを作りたいのです。 使っているCGIはメールフォームCGIで、回答結果をtest.txtファイルに蓄積していくのですが、 上記のような機能を追加させyたいのです。

    • ベストアンサー
    • CGI
  • さくらのサーバーでwww配下のcgiを使用し、サーバールートのファイル

    さくらのサーバーでwww配下のcgiを使用し、サーバールートのファイルを表示 ルートディレクトリ(wwwフォルダと同じ階層)にテキストファイルを設置し、 www配下に設置したcgiをブラウジングした際に、テキストファイルの内容を表示する仕組みを作ろうとしています。 別のサーバーでは動いているようですが、 なぜかさくらでは変数の値が表示されません。(<hr>は表示されています) ちなみにcgiのファイルとフォルダのパーミッションは755に設定しています。 わかる方いらっしゃいますでしょうか? よろしくお願いします。 cgiのソースは下記になります。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #! /usr/bin/perl open (FILE, "</home/txt1.txt"); $lst = <FILE>; close(FILE); open (FILE, "</home/txt2.csv"); $dat = <FILE>; close(FILE); print <<END; Content-Type: text/html; charset=Shift_JIS <html> <head> <title>testcgi</title> </head> <body> $lst <hr> $dat </body> </html> END ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

    • ベストアンサー
    • CGI
  • ローカルでCGIのテストに息詰まっています

    こんにちは、BoOoOoOoといいます。 ローカルでアクセス制限のCGI設置の練習をしているのですが、恥ずかしながらフルパスのところで息詰まってます。 KENT-WEBさんのCOSMO GATE-EXというCGIでテストしています。そこにある設置方法の説明を見ながら、何度もディレクトリとファイルの場所を移動して、エディタで編集してるのですが、....cgi?mode=check で確認するとエラーが出てしまいます。 環境は、サーバーソフトがhttpdで、ブラウザIE、OSがWin98です。 フルパスについて、どのCGI配布サイトにも説明してるので理解してるつもりがしてないようなのです。 ディレクトリ構造は、 C/httpd/home   |   +--private /secret.html   |      file01.html   |      file02.html   |      pass.txt   |      log.dat   |   +--public /index.html        |        +cgi /gatex.cgi となっていて、gatex.cgiの中の$dargetdir=に認証後に 移動するディレクトリを指定してくださいっとあったので、説明どおりに$dargetdir="/home/private";としたの ですが、「/home/private/pass.txtは見つかりません」と なります。何が悪いのか、わからないのでアドバイスをよろしくお願いします。 長文、すいませんでした。ちなみに、↓このCGIを使わせてもらっています。 http://www.kent-web.com/pwd/gatex.html?

    • 締切済み
    • CGI
  • ローカルファイルの操作

    フォームページ上でローカルマシンのフォルダ(c:\test\)を指定して、そのフォルダにあるファイル(テキストファイルのみ)をホームページ上に展開します。 更に展開された内容をホームページ上で修正して上書き保存したいのですが、そういうことってできますか。 dir関数とかを使ってローカルフォルダを指定するとエラーになってしまうんです。 failed to open dir: No such file or directory in ・・・

    • ベストアンサー
    • PHP
  • ローカルでは動くがサーバーでは動かない・・・

    メールを配信するCGIがあります。 フォームで登録するようになっているのですが、フォームで登録した際に、御礼のメールを配信したいと思って下記のようなphpを作っています。 フォームから送信されたデータを受け取り、送信者にメールを送った後、別のCGI(perl)にPOST送信するphpを作っています。 ローカルに作ったphp環境では動いたのですが、サーバーにアップロードすると下記のエラーが出て動きませんでした。 エラーメッセージ Warning: main(HTTP/Request.php): failed to open stream: No such file or directory in /home/*****/public_html/cgi/********/mail.php on line 34 メールを送信する部分は特に問題なく動いているみたいで問題はほかのcgiにPOST送信する部分にあるみたいです。初心者なのであるHPに掲載されていたコードをまる写しして必要な部分だけ変更しただけで、あまり意味は分からないままです。 /*POST送信*/ require_once "HTTP/Request.php"; $req =& new HTTP_Request("http://www.***.jp/******/cgi/**********/cgi-bin/*****.cgi"); $req->setMethod(HTTP_REQUEST_METHOD_POST); $req->addPostData("mail", "$mail"); $req->addPostData("md", "*****"); $req->addPostData("id", "**************"); if (!PEAR::isError($req->sendRequest())) { $response1 = $req->getResponseBody(); } else { $response1 = ""; } エラーメッセージにある34行目というのは require_once "HTTP/Request.php"; なのですが、どこに問題があるのでしょうか?

    • 締切済み
    • PHP
  • サーバー側で、XML,XSLを整形されたファイルを出力する方法?

    XMLについて、理解が浅いのですが ローカルでは XMLファイルとXSLファイルがあれば、 sabcmdを使えば、変換できますが、 例えば、WEB(CGI:Perl)でサーバーに XML,XSLファイルが合った場合に どのようにクライアント(ブラウザ)に出力させれば良いのでしょうか? サーバー側でxmlファイルとxslファイルを sabcmdで変換させて、結果を読み込んで出力させるのが筋でしょうか? いまいち理解していなくて済みません。

    • ベストアンサー
    • Perl
  • cat でファイルの拡張子を指定

    基本的なことで申し訳ないんですが、 UNIXのcat コマンドでファイルの中身を出力するときに、カレントディレクトリでないファイルを出力するには、パスも書きますよね。 cat パス/ファイル名 catでパスを指定して使うときに、 パスを繰り返し書かないで、 (その指定したディレクトリ直下だけでいいので)複数の特定の拡張子のファイルのみ出力するには、どうすればよいのですか? 例えば、 拡張子が、cとcsとtxtのファイルだけ出力して、その他のファイルは出力しない というようなときです。 既に書いたとおり、パスは繰り返して書かないので、 cat パス/*.c パス/*.cs パス/*.txt のようなものはナシということでお願いします。

  • レンタルサーバーlolipop cgiのパーミッションについて

    lolipopというレンタルサーバーを使っているのですが、パーミッションの設定が、cgiの取説と違っていて分かりません、、。 取説のパーミッションだとエラーが起きます。 ちなみに、lolipopが推奨するパーミッションは HTML・画像ファイル 604 (rw----r--) CGIの実行ファイル 700 (rwx------) CGIのデータファイル 600 (rw-------) .htaccessファイル 604 (rw----r--) ディレクトリ 705 (rwx---r-x) なのですが、 .pl などのファイルは何なのか さっぱりです。 私は、http://happy.honesto.net/cgi/ のサイトの FormMailerDX を作りたいのですが、 パーミッションの設定が分かりません。 お分かりになる方 教えてください。 FormMailerDXの取説は以下の通りです。 /fmdx/(755) | +--form.cgi(755)実行ファイル | +--sample.htm(644)フォームHTML | +--template.txt(666)メールテンプレートファイル | +--template2.txt(666)確認画面テンプレートファイル | +--jcode.pl(644)日本語コード変換ライブラリ | +--mimew.pl(644)MIMEエンコードライブラリ | +--/tsv/(777)TSVファイル作成ディレクトリ(空のディレクトリ) | +--/tmp/(777)添付ファイル一時保存ディレクトリ(空のディレクトリ) よろしくお願いします。

    • ベストアンサー
    • CGI
  • ユーザディレクトリのパス指定

    C++でユーザディレクトリ下のファイルを操作したいと思い http://hkpr.info/vc/UserDirectory/ のページを参考にプログラムに適用しました。 その結果、該当フォルダのパスがString型の変数に入ることは確認しました。 しかし、そのフォルダからさらに、下のフォルダ内のファイルを指定しようと そのString型の変数の後ろに「+=」を用いて、さらにパスを連結をしようとしたのですが、 うまく連結できませんでした。 例) 上記リンク先のサンプルで得たパス+=追加のパス; →連結されず、サンプルで得たパスのまま 追加のパス+=上記リンク先のサンプルで得たパス; →連結される。しかし、パスの順序が逆なのでパスとしては意味をなさない 上記リンク先のサンプルを利用しつつ、追加パスの連結を実現するにはどうすればいいのでしょうか? もしくは、ユーザディレクトリの取得としてもっといい方法があるのでしょうか? 補足ですが 「アプリケーションデータのディレクトリ」を利用したいと考えています

  • DTDファイルをクラスパスから読み込みたい

    DTDを利用したXMLファイルを読み込むDOMパーサーを作ってます。 表題のとおり、DOMパーサーがXMLファイル、DTDファイルを読み込む際に DTDファイルをローカルマシン(実行環境)のクラスパスにあるディレクトリ から読み込みたいのですがうまくいきません。 XMLパーサーにxercesを利用し、DOMを使ってます。 例えば、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE pagecontrol SYSTEM "sample.dtd"> <PEOPLE> <NAME>afternoon_cafe</NEME> </PEOPLE> のようなXMLファイルを、DOMパーサーがparse()メソッドによりロード すると、"sample.dtd"をカレントディレクトリからしか検索しません。 この"sample.dtd"をクラスパスにあるディレクトリに置き、それを 読み込むようにしたいのですが、、、 どなたかわかる方がいれば、教えてください。 お願いします。

    • ベストアンサー
    • XML

専門家に質問してみよう