みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PHPで画像データーのアップロードを行っています。

PHPで画像データーのアップロードを行っています。
一つの画像を imagesファイルにアップロードするまでは出来たのですが一度に複数の画像をアップロードする方法が分りません。
本で読んだところ、fileを配列にすれば良いと書いてあったのですが単純にフォームを配列にしてもやはり一つの画像しかアップ出来ませんでした。

-- form.html --
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form enctype="multipart/form-data" action='upload.php' method='post'>
<input type="hidden" name="MAX_FILE_SIZE" value="102400" />
<input type="file" width=40 name="sendfile" />
<input type="submit" value="送信" />
</form>
</body>
</html>

-- upload.php --
<?php
if (!isset($_FILES['sendfile']['name'])){
echo 'ファイルが見つかりません。';
exit;
}
$fname = $_FILES['sendfile']['name'];
$temp = $_FILES['sendfile']['tmp_name'];
$target = './images/' . $fname;
if (move_uploaded_file($temp,$target)){
echo $fname . "をアップロードしました。";
} else {
echo "アップロードに失敗しました。";
}
?>

勉強中の私に分り易く教えていただける方、よろしくお願いいたします。

また、PHPでのメール自動送信は出来たのですが自動受信が分りません。
(お問い合わせメールの様な)
これはかなり難しいのでしょうか?
フォームからウィンドウズメール、アウトルック等で受信できるようにしたいのですが?

PHP3.5+XAMPPでエクリプスを使い勉強しています。

投稿日時 - 2010-08-30 02:56:05

QNo.6145445

困ってます

質問者が選んだベストアンサー

> 単純にフォームを配列にしてもやはり一つの画像しかアップ出来ませんでした。

フォームだけ修正しても駄目で、PHPもファイルの数だけ処理をする必要があります。

HTMLで
 sendfile → sendfile[]

PHPで
  $_FILES['sendfile']['name']; → $fname = $_FILES['sendfile']['name'][$i];
$_FILES['sendfile']['tmp_name']; → $_FILES['sendfile']['tmp_name'][$i];
にして、$iをアップロードファイル数だけループで回す。(0~...)

という感じです。

(でもPHP3.5ってさすがに古すぎで、上記のような記述が使えるのか自信ないですが)


> フォームからウィンドウズメール、アウトルック等で受信できるようにしたいのですが?

ユーザーがメール発行

サーバーがその返信メールを自動受信して処理して、元の送信者にメールを送信

ユーザーが メーラーで内容確認

っていう意味ですか?


PHPでのメール自動受信は、メールサーバー上でPHPが実行できるなら
メールサーバーのaliasesか、~/.forward か、~/.qmailファイルで
"| /パス/なんちゃら.php"
を書いて、(/etc/smrshにも許可を入れて)
メールが届いたらPHPプログラムに パイプするようにするか、
(この場合、タイムリーな処理が可能で、プログラムもシンプルです)

POP受信の処理を書いた、PHPを任意のサーバー上に設置し
サーバーのcron処理で、定期実行させることになります。
(この場合、定期実行するまで処理が待たされるのと、
 一回のPOP受信で 複数のメールが届いているあることもあるので、ループ処理が必要なのと
 処理済みのものを再処理しないように、POPサーバーから削除してやる必要もあります)


メール受信の仕組みの理解が必要で、PHPだけの技術だけでは完結しないので、
難しいといえば難しいですね。

投稿日時 - 2010-08-30 10:48:06

お礼

superside0さん、ありがとうございます。
とても良いヒントになりました。

ちなみにこうしたら成功しました。

--form.html--
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="upld.php" enctype="multipart/form-data" method="post">
<input type="file" name="sendfile[]" /><br />
<input type="file" name="sendfile[]" /><br />
<input type="file" name="sendfile[]" /><br />
<input type="submit" value="送信" /><br />
</form>
</body>
</html>

--upld.php--
<?php
for ($i = 0; $i < count(@$_FILES['sendfile']['name']); $i++) {
$error = '';

if (!isset($_FILES['sendfile']['name'][$i])){
echo 'ファイルが見つかりません。';
exit;
}

$fname = $_FILES['sendfile']['name'][$i];
$temp = $_FILES['sendfile']['tmp_name'][$i];
$target = './images/' . $fname;

if (move_uploaded_file($temp,$target)){
echo $fname .' ', "をアップロードしました。<br />";
} else {
echo "アップロードに失敗しました。";
}
}
?>

あとPHPのバージョンは5.3の間違いでした。
単純なキーボードの打ち間違えでした、すみません(/_\)

メールの自動受信については
ホームページのメールフォームにお客様が記入をし送信ボタンを押すと問合せや注文メールが会社へ届くようにしたいと思い勉強しています。

メール自動送信がPHPとphp.iniで割と簡単にできたので受信も良い方法があるのではないかと思い聞いてみました。

現在OCNのメールアカウントを使用しており仕組みについては深くは理解出来ておりません。

現状では難しそうですね。

投稿日時 - 2010-08-30 16:31:50

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

全然ちがう内容を一緒に質問しない方がいいですね

複数ファイルのアップロード
type=fileのフィールドを複数用意するだけです。
名前の付け方は2つあり、一つはユニークにつける、
もうひとつは[]をつけて同じ名前にする
実際にテストでアップしてみれば違いがわかるかと思います。


<form enctype="multipart/form-data" method="post">
<input type="file" size=40 name="sendfile1" />
<input type="file" size=40 name="sendfile2" />
<input type="submit" value="送信" />
</form>
<form enctype="multipart/form-data" method="post">
<input type="file" size=40 name="sendfile[]" />
<input type="file" size=40 name="sendfile[]" />
<input type="submit" value="送信" />
</form>

<?
print_r($_FILES);
?>

投稿日時 - 2010-08-30 10:58:53

お礼

yambejpさん、

まったく違う質問を一度に行い申し訳ありません。

教材(本)を読みメールの自動送信は簡単に出来たのですが、受信の方法は何一つ載っていなかったので何か手本となる物がほしくて一緒に質問してしまいました。

以後気を付けます。

投稿日時 - 2010-08-30 16:39:30

あなたにオススメの質問