アプリ版:「スタンプのみでお礼する」機能のリリースについて

最近、PHPを勉強し始めた初心者です。

よくわかるPHPの教科書(毎日コミュニケーションズ刊)の109ページに載っているファイルアップロードの仕方が上手くいきません。

本書通りプログラムしてJPEG画像をアップしているはずなのですが 「※拡張子が.gif, .jpg, .pngのいずれかのファイルをアップロードしてください」 が表示されてしまいます。

XAMPP 1.7.3を使用しています。特に設定を変更したところはありません。

sample23.phpと同じフォルダ内にuser_imgフォルダも作りました。

何がいけないのでしょうか?


●sample23_input.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>ファイルアップロードを受信する</title>
</head>

<body>
<form action="sample23.php" method="post" enctype="multipart/ form-data">
<dl>
<dt>写真</dt>
<dd>
<input name="my_img" type="file" id="my_img" size="50" /></dd>
</dl>
<input type="submit" value="送信する" />
</form>
</body>
</html>


●sample23.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>ファイルアップロードを受信する</title>
</head>

<body>
<?php
$file = $_FILES['my_img'];
print('ファイル名(name): ' . $file['name'] . '<br />');
print('ファイルタイプ(type): ' . $file['type'] . '<br />');
print('アップロードしたファイル(tmp_name): ' . $file['tmp_name'] . '<br />');
print('エラー内容(error): ' . $file['error'] . '<br />');
print('サイズ(size): ' . $file['size'] . '<br />');

// ファイルアップロードの処理をする
$ext = substr($file['name'], -3);
if ($ext == 'gif' || $ext == 'jpg' || $ext == 'png') {
$filePath = './user_img/' . $file['name'];
move_uploaded_file($file['tmp_name'], $filePath);
print('<img src="' . $filePath . '" />');
} else {
print('※拡張子が.gif, .jpg, .pngのいずれかのファイルをアップロードしてください');
}
?>
</body>
</html>


一時ファイルが保存される場所を検索すると C:\xampp\tmp と表示されます。

よろしくお願いします。

A 回答 (4件)

追伸



d05500098_2.pdf は テストで わざと jpg とか ではないファイルを指定しただけで、深い意味はありません。
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2010/12/17 12:03

そちらの提示したソースをコピペして、実際に動かしてみました。



確かにアップロードされていません。

<?php の直後に print_r($_REQUEST); と入れてみました。

Array ( [my_img] => d05500098_2.pdf )

↑このように表示されました。

これで このように表示されると言う事はつまり、multipart として送信されてないと思われます。

公式からダウンロードしてきたソースと見比べてみました。
この本の公式は こちら → http://book.mycom.co.jp/support/pc/php/

↓この行の
<form action="sample23.php" method="post" enctype="multipart/ form-data">

ここらへんの部分
enctype="multipart/ form-data"

form-data の前に半角スペースが入っているのがまずいみたいです。
    • good
    • 0
この回答へのお礼

実際に試していただき有難うございます。

無事成功しました。

教科書では丁度、行の折り返しの部分でしたので勘違いしていました。

お礼日時:2010/12/17 12:02

NO.1の者です。




>sample23.phpと同じフォルダ内にuser_imgフォルダも作りました。

階層は問題無いようでしたね。
大変失礼しました。見逃してました。。。
    • good
    • 0
この回答へのお礼

回答有難うございます。

お礼日時:2010/12/17 11:56

はじめまして。



windows環境で構築されているのですね。

プログラムを見た感じ、特に問題無さそうですが・・・
「 user_img 」ディレクトリを設置している場所は間違いありませんか?

「 ./user_img/ 」となっていますので、「 sample23.php 」と同じ階層に
設置していますか?

階層に問題が無ければ、XAMPPの設定かもしれませんが、私はwindowsに
詳しくありませんので、無責任な回答はできませんので悪しからず。。

あと、関係ないかと思うのですが、XHTMLをHTMLで記述してみてはどうでしょう?

全く的外れでしたらごめんなさい。
    • good
    • 0
この回答へのお礼

回答有難うございます。

>windows環境で構築されているのですね。
はい、そうです。

お礼日時:2010/12/17 11:56

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