[PHP-users 9867] Re: ファイルアップロードの不思議な現象
NAKAMURA Takeshi
php-users@php.gr.jp
Fri, 06 Sep 2002 23:05:07 +0900
仲村です。
最後だけ読む方が良いかと思いますです。はい。
From: SEGAMI Takashi <sage@tokyo.MicroCAD.CO.JP>
Date: Fri, 6 Sep 2002 21:54:16 +0900
Subject: [PHP-users 9863] Re: ファイルアップロードの不思議な現象
> 相変わらず、判りません。
では、説明おば(^^;
「C:\Documents and Settings\sage\デスクトップ\README.TXT」
というファイルが、あるとします。
DOSプロンプトで
「C:」 Cドライブに移動。
「cd "C:\Documents and Settings\sage\デスクトップ\"」でディレクトリを移動
「dir」すると、README.txt っていうファイルが見えますね?
「notepad README.txt」ってすると、メモ帳で README.txt って
ファイルが開けます。
次に、同じくDOSプロンプトで
「cd "C:\"」 として、カレントディレクトリを移動
「dir」しても README.txt ってファイルが見あたらないでしょう。
「notepad README.txt」ってやっても 無いファイルですから
メモ帳は README.txt を C:\README.txt を作ろうとします。
さらに、
「D:」Dドライブに移動
「dir C:」 さっきと同じ ファイルが見えていますか?
「cd どこか」 D ドライブのディレクトリを移動します。
「dir C:」 でも、C:のファイルは同じ物が見えますねぇ。
C:とした時に見えるのであれば、ファイル名の頭につけて
「notepad C:README.txt」
「cd」今いるディレクトリを表示させると Dドライブにいますね?
「cd C:..」 C: のカレントディレクトリを変更します
「cd」 でも、カレントディレクトリは Dドライブのままです。
「dir C:」 Cドライブを見てみると一つ上に移動しました。README.txtは見えません。
「notepad C:README.txt」 メモ帳は新しいファイルを作ろうとします。
「dir C:デスクトップ」 だと見えますね。
じゃ、これをファイル名の頭に付けて
「notepad C:デスクトップ\README.txt」 これだと開けますね。
「C:」 Cドライブへ移動
「cd」 C:\Documents and Settings\sage\ にいるでしょう?
「notepad デスクトップ\README.txt」 これでも、開けます
「notepad C:デスクトップ\README.txt」 これでも、開けます
「notepad "C:\Documents and Settings\sage\デスクトップ\README.TXT"」勿論フルパスなので これでも、開けます
一つのファイルを指すのに、いろいろな方法がある訳です。
IE だって cd なり C言語(で書かれていると思う)で、chdir した
ディレクトリにあるファイルは、パスを書かなくても 同じドライブで
あれば、ファイル名だけで見つけることができます。
> でも現実は、アップロードされてしまいます。
IE ですから...いや、試したところ mozilla も w3m もでした。
> サイズで確認したくても、例えばA:\README.txtファイルが存在すると、
> A:README.txtとタイプミスしてもA:\README.txtがアップロードされて
> しまいます。
> 宇野様の言うように、それは当然だとしても
mozilla や、 w3m では、README.txt で渡されます。
これは、ブラウザの癖ですね。
「IEは使わないで」と、言うのも一つの手でしょう。個人ページですら最近は難しいですが...
> 今度は、PHP側で、A:README.txtというファイル名として渡ってきて
> しまいます。(サーバ側が)Windowsの場合、このファイル名では存在できません。
> 結局、アップロードされてしまうのは、しょうがないと思って、
> サーバ側がWindowsの場合、コロンを除去したファイル名に直してから
> じゃないとダメということになります。
除去せずにURLエンコードしてもいいでしょう
# い、いかん、何か今日はチャチャが...
> このケースは非常にレアだとは思うのですが、知ってしまった以上、
> お客様に迷惑はかけれないので、なんとか力技で対処するしかないですね。
> あーぁ、面倒。
ディレクトリパスは必要ないので、ばっさりと切っちゃうのがお手軽です。
先のperlでは、こんな事してます...って言うか、さっき変えました(^^;
# Perl に basename が無い訳ないと思うんだけど...
# ドライブ名区切りや、ディレクトリ区切り(:,/,\)より後ろ
# ファイル名部分を抜き出す
if ($filename =~ /[:\/\\]([\w\.\+\-]*)$/){
$filename = $1;
}
=== ここから読んでください ===
それには、UNIXのコマンドに basename ってのがあり phpでは
http://jp2.php.net/manual/ja/function.basename.php
basename ってのがあります。って、同じじゃん!!(笑)
----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+
関西沖縄青年の集い がじまるの会 手伝い 一人だけの勝手に神奈川支部
仲村 武 <1Yen@Bigfoot.COM>