• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル名の切捨てとリンクの張り方)

ファイル名をカットする方法(例:c: emp est.txt->test.txt)にするにはどうしたらよいのでしょうか?

このQ&Aのポイント
  • ファイル名の記録をする際に、フルパスでのファイル名が取得されてしまった場合に、ファイル名をカットする方法について教えてください。
  • ファイル名のカット方法を教えていただけませんか?例えば、ファイル名が「c: emp est.txt」の場合、カットして「test.txt」とする方法です。
  • ファイルアップロード時に取得したファイル名がフルパスになってしまう場合、ファイル名をカットする方法を教えてください。例えば、「c: emp est.txt」を「test.txt」とする方法です。

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

  • ベストアンサー
noname#25358
noname#25358
回答No.2

>長いファイル名でも対応可能でしょうか?  できます。わざとそういうふうに作りましたので。 >こちらで表示ができておりません。  ブラウザ上ではHTMLはどのように見えていますか?  正しいパスを指し示しているか、またはその位置にファイルがちゃんと存在しているかを調査してみてください。  また、もしパスが正しいのであれば、.htaccess などを書き換えてMIMEを調整するか、もしくはダウンロード専用のCGIが別に必要かもしれません。(自信なし)

cardy55
質問者

補足

deagle様度々ありがとうございます。 再度確認いたします。 $inLink =~ s/^.*[\\\/]//;は下記プログラムの open(OUT, "> ../upload/$inLINK");直前でよろしいのでしょうか? 何度も申し訳ありませんが、挿入位置を教えて下さい。 ------------------------------------------------------------- $BUFSZ = 2048; # $file = ''; # $buffer = ''; # if ($inLINK ne '') # { # while ($bytesread = read($inLINK, $buffer, $BUFSZ)) # { # $file .= $buffer; # } # # open(OUT, "> ../upload/$inLINK"); # binmode(OUT); # print(OUT $file); # close(OUT);

その他の回答 (4)

回答No.5

ちなみにアップ元の環境は Windowsだけを考えればいいんですか? それによって違ってきますけど File::Basenameを使った方がスマートじゃない?

cardy55
質問者

補足

dondon5959様おはようございます。昨日は作業途中で眠ってしまいました...アップ環境はWINが圧倒的ですが、MACも一部ございます。不勉強で申し訳ありませんが、Basenameとはどのようなものでしょうか?

noname#25358
noname#25358
回答No.4

>このアップロードの部分は抜粋です。  了解しました。  あと、read() 関数の第1引数は、ファイル名ではなくファイルハンドルを記載します。(先の回答にこの件を書き忘れました)

cardy55
質問者

お礼

deagle様おはようございます。昨日は色々ありがとうございました。$inLink =~ s/^.*[\\\/]//;を if ($inLINK ne '')の直前に付加しましたが、ファイル名がc:\temp\test\cgi\test.cgiのようにロングネームになったままになってしまいます。WINDOWSクライアントからlinuxサーバーにアップロードする為、ロングネームのままだとファイルがリンクが張れません。ご面倒ですが、ファイル名をtest.cgiにする方法を教えて下さい。ご面倒をお掛けして申し訳ありません。

cardy55
質問者

補足

deagle様本当に本当にありがとうございます。 大変参考になりました。現在リンク解明に全力投球中です。 一応リンクに関して不明点がありますので、この質問のクローズしませんがご了承下さい。

noname#25358
noname#25358
回答No.3

>挿入位置を教えて下さい。  "# if ($inLINK ne '')" この行の直前が無難でしょう。  それと、if 文内の read() 関数の使い方がなんか適当っぽいんですが、これはわざとですか?  もしわざとでなければ、前とあとに別途 open 文と close 文を追加する必要があるかと思います。(サーバー上にすでにファイルがあるんであれば)

cardy55
質問者

補足

deagle様本当にありがとうございます。 open 文と close の件ですが、このアップロードの部分は抜粋です。 そのほかのファイルに関してはopenとcloseをしております。 ※検討違いであればご指摘をお願いします。 先ほどのリンクの件ですが、ソース表示でみた所リンクが張られていないようでした。見直してみます。何かヒントなどありましたらお願いします。頼ってばかりで申し訳ありません。

noname#25358
noname#25358
回答No.1

 $inLink を使う直前に下記の1文を追加します。  $inLink =~ s/^.*[\\\/]//;  ちなみに画面上に表示する方法は、通常 <A> タグで表示するだけだと思うのですが、何が問題になっているのですか?

cardy55
質問者

補足

deagle様ご回答ありがとうございます。 $inLink =~ s/^.*[\\\/]//;についてですが、C:\TEMP\TEST.TXTだけでなくc:\デスクトップ¥test\temp\doc\test.txt等という長いファイル名でも対応可能でしょうか? ご面倒ですがご解説をお願いいたします。 またファイルのリンクについては別プログラムで下記(抜粋)のような記述をしております。こちらで表示ができておりません。 何か方法はあるのでしょうか? 大変恐縮ですが、本日中に作成の仕事で困っております。 何卒よろしくお願いいたします。 ------------------------------------------------- $tPutIconA = "<a href=\"../upload/$sNewsData[5]\"><img src=\"../img/btn_html.gif\" alt=\"\" width=\"27\" height=\"37\" border=\"0\"></a>"; $tPutIconB = "<a href=\"../upload/$sNewsData[5]\">$sNewsData[1]</a>"; }

関連するQ&A

専門家に質問してみよう