-PR-
解決済み

CGI_lite.pmを使ったファイルのアップロード

  • すぐに回答を!
  • 質問No.34196
  • 閲覧数220
  • ありがとう数3
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 18% (4/22)

CGI_lite.pmを使いファイルをアップロードしたところちゃんとファイル自体はアップロードできているのですがファイル名が変わってしまっています。
たとえば「index.html」というファイル名ならば「980815043__index.html」と
なってしまいます。

サーバーはunixです。

どうか詳しい方教えてください。お願いします。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル5

ベストアンサー率 25% (1/4)

1普通にテキストエリアからテキストを読むようにする
(多分これでとれたと思います)
2アップロードされたファイルから取得する
(ディレクトリの中を検索。先代はこれでやっていました)

最悪2でできるのでやってみてください
(ただしアクセスが多くなって処理し切れなくなると
どうなるか、考えただけでぞっとしますが...)

多分一番でできますのでやってみてください

っていうかソースプログラムにファイル名変換という気になる
フレーズがあるのでそっちの方が確実かも知れませんね

後は正規表現との戦いです(笑)
お礼コメント
Sadsfan

お礼率 18% (4/22)

ありがとうございました。1でできました。2は使いたくないですね。恐ろしいです。
投稿日時 - 2001-02-02 10:26:06
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.1
レベル5

ベストアンサー率 25% (1/4)

私も昔やったことがある(先代の人の直し)のでわかります。
確かにこれは厄介で困りました。

やり方は
($temp,$filename)=split /__/,$files;

$filesはファイルへのパスです(例 /uer/home/user1/980814043__html)
単に名前を変えてやれば良かったと思います
$filenameのなかを見てやればアップロードしたいファイル名になっていると思います
補足コメント
Sadsfan

お礼率 18% (4/22)

ごめんなさい。変化なしです。おそらくファイルへのパスの$filesが別物だと思いますが、わからないので(雑誌に乗ってたやつなので)下にコピーしますのでもしおひまがありましたら、見てやってください。

よろしくお願いします。

__________________________________________________________________
use CGI_Lite;
require 'util.pl';

#
# 定数
#
$Temp = './temp';
$Platform = 'Unix';
$BUFSZ = 2048;
$CharSet = 'Shift_JIS';

$upload = new CGI_Lite;

# アップロード先
$upload->set_directory($Temp) or
exitError("ディレクトリ $Temp がオープンできません。");
# プラットフォームの設定
$upload->set_platform($Platform);
# バッファーサイズの設定
$upload->set_buffer_size ($BUFSZ);
# ファイル名の変換
$filename = $upload->filter_filename(\&convName);


$upload->close_all_files;

# フォームデータの解析
%data = $upload->parse_form_data;

if ($upload->is_error()) { # アップロードのエラー
exitError($upload->get_error_message());
}


print <<END_OF_HTML;
Content-type: text/html
省略
____________________________________________________________________
投稿日時 - 2001-01-30 12:59:54


  • 回答No.2
レベル5

ベストアンサー率 25% (1/4)

え、ファイル名がだけ変わっているんじゃないの?
このperlファイルを見る限り

$Tempのディレクトリに送られて来たファイルが入っていて
そこからファイル名を変えて必要な場所に移動してあげれば
いいと思うんですが...

まずアップロードされたファイルがあるかどうか
確認してください

実験する場合はHTMLのようなテキストだけではなく
gifなどを混ぜて行うとちゃんと送信できたかどうかわかりますよ
補足コメント
Sadsfan

お礼率 18% (4/22)

すいません補足しときます。確かにFTPとかでファイルの確認をすればいいと思うのですが、最終的にすべてCGIを使用する予定です。
今の時点ではファイル名がサーバーにアップロードされた時点でなにが頭につくかが判断することができません。となるとCGIでファイルのリネーム、移動などもできないのではないでしょうか。

ご指摘ありがとうございました。何か方法がおわかりになりましたらよろしくお願いします。
投稿日時 - 2001-01-30 14:45:59
  • 回答No.3
レベル5

ベストアンサー率 25% (1/4)

うーん、わたしの説明不足だったようですね。
確認というのはSadsfanさんがデバッグのためにと言うことだったのですが...

Sadsfanさんがunixマシン(telnetでもsshでも何でもいいですが)の
前にいらっしゃると仮定します。

まず送られて来たデータは$Tempの場所に保存されます。
(私の場合は./といった相対パスではなく/home/user/tempなどにしています)
ここに
(数字の羅列)__(目的のファイル名)
と間には_(アンダーバー)を2つ挟むと言う規則で
ファイルが保存されます。
よって正規表現でアンダーバーの前の数字をとってしまえば
もとのファイル名を取得することができるのです。
*__*(<-正規表現で書いた一般の形、顔になっちゃった)

ファイルの移動はアンダーバーを含んだファイル名から
正しいファイル名にと言う感じで
cp /home/user/temp/980815043__index.html /home/user/index.html
(ごめんなさい 最近perlやってないので普通のcpコマンドでかんべんしてください)
'/home/user'や'/home/user/temp'を変数に代入しておけば
文字列の連結でできると思います

ファイルの保存先を変えるときはパーミッションに気を付けてください
多分nobodyの書けるところじゃないと書けないはずですから...
補足コメント
Sadsfan

お礼率 18% (4/22)

ご丁寧にありがとうございました。あと肝心なことを聞きたいのですが、アップロードされたファイル名はどう取得したらよいのでしょうか。
何度も質問すいません・・・お願いします!
投稿日時 - 2001-01-30 16:48:26
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ