3

PHPの専門家、私はこの問題に約1日半取り組んできましたが、途方に暮れています。私が正しければ、PHPで間違いなく大きな見落としを発見しました。信じられないことですが、他の人に問題を引き起こしているわけではありません。Googleで同じ問題を抱えている人を見つけましたが、全員が敗北を受け入れた。PHPにバグを報告した人もいましたが、活動がなかったために最終的には閉鎖されました。

WAMPスタックでApacheを使用してPHP5.3を実行しています。

単純なファイルアップロードを行っています(その後、tmpの場所から移動します)。セキュリティと速度の理由から、最初のアップロード一時ディレクトリ(upload_tmp_dir)を、ファイルが保存される別のディスクに配置します。移動後、これはたまたまネットワーク共有です。Z:\temp。通常、これはPHPと同じディスク上にありますが、これは、潜在的に大きなファイルをアップロードしてから、別のディスクにコピーするのを待つ必要があることを意味します。クイックムーブを実行します。

例:

//upload_tmp_dir = Z:\Temp (set in php.ini)
$targetpath = Z:\Data\pdfs (final destination)
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $targetpath);

理論的には、これによりファイルが一時的にZ:\ Tempにアップロードされ、エラーなしで完了したら、最終的な宛先であるZ:\ Data \ pdfs\filename.pdfに移動されます。

upload_tmp_dirがPHPと同じドライブ(C:\ MyTemp)にある限り、ファイルのアップロードと移動が機能することを確認しましたが、Z:\Tempなどの別のドライブに移動すると機能しません。php.iniでupload_tmp_dirに指定した値は単に無視され、別のドライブ/パーティションに移動しようとすると、ファイルはC:\ Windows\Tempに保存されます。マップされたドライブであることに違いはないようです。権限はすべて正しく設定されており、共有とセキュリティの両方で全員が許可されています(chmod 777と同等)。

「PHP」、特にmove_uploaded_file()が「ドライブのトラバースに問題がある」ことを複数の場所で読んだことがあります。これは明らかに私が推測するセキュリティ上の理由によるものですが、どこでもオーバーライドできるようには見えません。ただし、仮想化を使用するサーバーやスペースが限られているSSDの数が増えるにつれ、これがどのように可能になるのかわかりません。一度に数百人のユーザーがファイルをアップロードするサイトを運営している場合、一時ファイル(巨大になる可能性があります)がPHPがあるC:\に存在しなければならないことはどのように意味がありますか?以前にこれに対処したことがありますか、または何かヒントがありますか?

アクセスを制限している可能性のある他のPHPおよびApache設定を調べましたが、たとえばopen_base_dirにすべてのパスを設定しても、何の役にも立たないようです。

私が見つけたいくつかの投稿は、同じまたは同様の問題の概要を示しています。

http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Databases/Q_21190386.html

https://serverfault.com/questions/128017/php-ignores-upload-tmp-dir

https://bugs.php.net/bug.php?id=44420

4

1 に答える 1

2

こいつらはこう言います。

マップされたドライブはユーザー固有であり、Web サーバー、および結果として php は、別のユーザー名で実行されます

http://forums.phpfreaks.com/index.php?topic=175349.0

于 2012-06-21T14:19:50.950 に答える