プロが教えるわが家の防犯対策術!

あるPHP技術書籍で掲載のPHPファイル・アップロードの例を試したところ、アップロードするファイル・サイズは、小さいな(数KB)場合が成功、より大きな場合(例えば40KB~)が失敗!何故失敗なのかよく分かりません。ファイル種類には関係なさそうです。

詳しい方に教えて頂ければ助かります。

※ ご参考 -
1. 具体的なHTML&PHPコードは、次の通りです。
2. 利用環境: 最新版XAMPP、Windows 7、XAMPPデフォルト・ルートをD:のある
フォルダーに変更。D:に十分空き領域があると確認済み(数十GB)。

=====HTML=====================

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>fupload</title>
</head>
<body>
<h3>ファイルアップロード</h3>
<form method="POST" action="fupload.php" enctype="multipart/form-data">
<!-- MAX_FILE_SIZE は、必ず "file" input フィールドより前になければなりません -->
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<!-- input 要素の名前が $_FILES 配列での名前となります -->
<input name="userfile" type="file" size="70"/>
<input type="submit" value="アップロード" />
</form>
</body>
</html>

=====PHP--=====================

<?php
$uploaddir = './up/file/';
$uploadfile = basename($_FILES['userfile']['name']);
echo '<pre>';
//if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir.$uploadfile)) {
echo "ファイルアップロードに成功しました。\n";
} else {
echo "ファイルアップロードは不成功です。\n";
}
echo '<pre>';
?>

=====PHP関連設定(php.ini)========-==

;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;

; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads=On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
upload_tmp_dir="C:\xampp\tmp"

; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize=2M

; Maximum number of files that can be uploaded via a single request
max_file_uploads=20

A 回答 (3件)

php.iniのpost_max_sizeを設定するとか


httpd.confのLimitRequestBodyを設定してみては?

それにしても40Kくらいで引っかかることはないと思いますが

この回答への補足

皆さん御回答頂き誠に有難うございます!
ご指摘に対して、一々試しましたが、残念ながらまだ駄目です:

php.ini:
 post_max_size = 8M (元々の設定で触らない)

httpd.conf:
LimitRequestBody 102400 のように追加

C:ドライブの総空き容量は、13.9GB。


7KB, 19KB, 29KB, 30KB, 39KBのファイルサイズを試したところ、30KBからアップロードが駄目になり始めちゃいました!

何か新しい手掛かりを気付き、教えて頂ければ有り難いです。

補足日時:2014/11/21 19:01
    • good
    • 0
この回答へのお礼

皆さん有難うございました。全て回答は同等に役立ったが、一番早い回答をベストアンサーに選ばせて頂きました。

自分で更に色んな模索しながら、問題を解消させました - 「解決」より、「解消」というのは、究極的な原因がまだ分かっておらず、但し、何らかの変更により、問題を消させて思う通りサイズのファイルをアップロードすることが出来るようになりました - 方法はApacheデフォルトのフォルダー・ルートを変えること。

残す不思議の疑問点 -

(1)上記「問題解消策」の前、アップロードは、何故、小さいなファイル
   ならOK、一定サイズ(30KB)以上なら駄目だのか。要は一貫性が
ない点で不思議。通常は駄目だったら、全て駄目なはずのに。
(2)上記「問題解消策」というのは、Apacheルートフォルダー変更だけ
   で、何故そうすることで問題を解消させることが出来るのか、やはり
   究極的な理由が分かっていません。

お礼日時:2014/11/25 10:22

> XAMPPデフォルト・ルートをD:のあるフォルダーに変更。

D:に十分空き領域があると確認済み(数十GB)。
ということだけど、

php.iniで
> upload_tmp_dir="C:\xampp\tmp"
と、一時ファイル置き場をC:ドライブにしてるんですね。

ということは、C:ドライブが 不足しているということはないですか?

この回答への補足

皆さん御回答頂き誠に有難うございます!
ご指摘に対して、一々試しましたが、残念ながらまだ駄目です:

php.ini:
 post_max_size = 8M (元々の設定で触らない)
 memory_limit=128M (元々の設定で触らない)

httpd.conf:
LimitRequestBody 102400 のように追加

C:ドライブの総空き容量は、13.9GB。


7KB, 19KB, 29KB, 30KB, 39KBのファイルサイズを試したところ、30KBからアップロードが駄目になり始めちゃいました!

何か新しい手掛かりを気付き、教えて頂ければ有り難いです。

補足日時:2014/11/21 19:04
    • good
    • 0

><input type="hidden" name="MAX_FILE_SIZE" value="100000" />



ここで100000バイトと制限していますが、それ以下でもダメなんですかね?

>upload_max_filesize=2M

post_max_sizeとmemory_limitはどうなっていますか(さすがにmemory_limitが数十KBはあり得ないでしょうけど)。



なおサーバ側で保存するときに、$_FILES['userfile']['name'] を使うべきではありません(不正なファイル名を送信される可能性があります)。

この回答への補足

皆さん御回答頂き誠に有難うございます!
ご指摘に対して、一々試しましたが、残念ながらまだ駄目です:

php.ini:
 post_max_size = 8M (元々の設定で触らない)
 memory_limit=128M (元々の設定で触らない)

httpd.conf:
LimitRequestBody 102400 のように追加

C:ドライブの総空き容量は、13.9GB。



7KB, 19KB, 29KB, 30KB, 39KBのファイルサイズを試したところ、30KBからアップロードが駄目になり始めちゃいました!

何か新しい手掛かりを気付き、教えて頂ければ有り難いです。

補足日時:2014/11/21 19:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!