[PHP-users 9878] Re: ファイルアップロードの不思議な現象

KAWAI,Takanori php-users@php.gr.jp
Sat, 7 Sep 2002 11:29:23 +0900


川合孝典です。

Windowsでは、ドライブ毎にカレントディレクトリがありますから、
(つまり単に"C:"とかやったとき、実際にどのディレクトリになるのかは
それまでの状況によるということで)、余計に話がややこしくなっている
とは思います。今回のように送ってくるのがIE6の仕様かもしれませんし:-P

----- Original Message -----
From: "SEGAMI Takashi" <sage@tokyo.MicroCAD.CO.JP>
To: <php-users@php.gr.jp>
Sent: Friday, September 06, 2002 10:07 PM
Subject: [PHP-users 9864] Re: ファイルアップロードの不思議な現象


> 瀬上です。
(中略)
> ということは、PHP側の変数になる元の情報は、ブラウザ側で決めていることに
> なりますね。

というより、サーバー側ではブラウザ(クライアント)側から渡された
情報をベースにするしかありませんから、仕方ないでしょう。

サーバー側ではRFC(RFC 1867あたり)で決められたフォーマットで
「大きさはXXX、名前はXXX、タイプはXXXで、内容はこんなファイル
ですよ」といわれたら、それで処理するしかありません。

以前のNetscape Navigatorで、Windows上からファイル名に漢字の
入ったファイルをアップロードすると大きさが0になることがあるという
現象がありました。そのページのcharsetがEUC-JPだった場合、
(SJISではなく)漢字をEUC-JPでそのファイルを探していたために、
ファイルがオープンできなかったのが原因のようです。
(その名前をEUCにしたら、そのファイルが送られましたから)

また下記のPerlスクリプトであれば、その「ABC.TXT」という名前で
内容がABCだけの「なんちゃってJPEGファイル」がアップロードされます。
これはPerlに特殊な能力があるわけでもなくって、単に
決められたフォーマットを作って、対象となるWWWサーバーのスクリプト
に送信できるのであれば、他の言語でも可能です。

ただ、いずれにせよ「クライアント側に存在するファイルだけ」を送るか
どうかは、クライアント側の問題ですから、サーバー側だけで
どうこうできる問題ではないでしょう。
#使うことが出来るブラウザを限定するとか
#そうなるとブラウザを詐称できるので...

[Perlで「ファイル」をアップロード]
use strict;
use HTTP::Request::Common;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $oReq =
    POST 'http://192.168.1.101/tfile.php',
        Content_Type => 'form-data',
        Content => [
            txtName => 'UPLOAD TEST',
            filUpd  => [
                undef, 'ABC.txt',
                Content_Type => 'image/jpg',
                Content => 'ABC']];
print $ua->request($oReq)->as_string;

[受けるPHP]
<?php
copy ($filUpd, '/home/apache/htdocs/test.dat');
print <<< END_OF_HTML
<HTML><BODY>
<P>\$filUpd = $txtName</P>
<P>\$filUpd = $filUpd_name</P>
<P>\$filUpd_size = $filUpd_size</P>
<P>\$filUpd_type = $filUpd_type</P>

END_OF_HTML;
echo $_POST['txtName'] . "<BR>\n";
echo $_FILES['filUpd']['size'] . "<BR>\n";
echo $_FILES['filUpd']['type'] . "<BR>\n";
echo '</BODY></HTML>';
?>

[実行結果]
HTTP/1.1 200 OK
Connection: close
Date: Sat, 07 Sep 2002 02:22:11 GMT
Server: Apache/1.3.26 (Unix) PHP/4.1.2 mod_perl/1.27 mod_ssl/2.8.10
OpenSSL/0.9.6e
Content-Type: text/html
Client-Date: Sat, 07 Sep 2002 02:23:03 GMT
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
X-Powered-By: PHP/4.1.2

<HTML><BODY>
<P>$filUpd = UPLOAD TEST</P>
<P>$filUpd = ABC.txt</P>
<P>$filUpd_size = 3</P>
<P>$filUpd_type = image/jpg</P>
UPLOAD TEST<BR>
3<BR>
image/jpg<BR>
</BODY></HTML>

===================================================
川合 孝典 (Hippo2000)
   DBI日本語メーリングリスト管理人、Kansai.pm所属
   kwitknr@cpan.org GCD00051@nifty.ne.jp
   http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/
「MySQL&Perl Webアプリケーション開発」の発売中
   http://member.nifty.ne.jp/hippo2000/mysqlperl.htm
===================================================