画像のアップロードができない - PHPプロ!Q&A掲示板

217

  • 0P

画像のアップロードができない

質問日時 / 2006年10月31日 11:10    回答数 / 8件

Questioner:  hattimayya  このエントリーをはてなブックマークに追加 

キーワード / php    画像ファイル    アップロード   

php初心者です。よろしくお願い致します。
レンタルサーバーに画像をアップロードする為のphp5スクリプトを作成したのですが、実際のテストでアップロードが出来ません。enctypeとfileできちんとローカルマシンの画像を指定して実行するのですが、次の登録確認画面のphpスクリプトによる入力チェックの段階で画像ファイルが指定されていないというエラーが出ます。
一応その後は、アップロードしたサーバー内のテンポラリファイルのファイルをmicrotime関数等で取得した文字列を元に別のファイル名に変えて、所定の一時フォルダへ移動させる手順を取っています。
そういった件に関してレンタルサーバー側は、phpの設置はOKですがphpプログラムの設定等に関しては質問を受け付けられないと言われています。レンタルサーバー内のphpの設定が関係しているのでしょうか?

ちなみにtypeがfileのname属性に関して、よく参考書等ではuploadfileという名前が付けられてありphpでの変数が$uploadfileとしてあって、指定ファイルの名前が格納してある$uploadfile_nameとか、サイズを知る$uploadfile_sizeなどで画像ファイルに関する情報を取得していくと記述してありますが、そのname属性が例えばphotoである場合は、phpスクリプトでは$photo_nameや$photo_sizeで名前やサイズを取得できるようになるのでしょうか?その辺が今回のミスの発見につながるのかとも思いまして。

お忙しい中とは思いますが、どうぞ合わせてお願い致します。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01natsumickeyはじめまして。 >ちなみにtypeがfileのname属性に
┃┗A01-1hattimayyaお返事ありがとうございました。本当に感謝です。
┣A02edute初心者との事で、一応確認がてらのご意見となりますけ
┃┗A02-1hattimayyaお返事ありがとうございました。本当に助かりました。
┣A03natsumickeyこんにちは。natsumickeyです。 >$mictime = $micr
┃┗A03-1hattimayyahattimayyaです。 いや~本当にありがとうございます
┗A04edute無事できたようでなによりです。 仕組み的にFTPソ
 ┗A04-1hattimayyahattimayyaです。 御回答ありがとうございました。

回答一覧

並び替え:

A01 満足
answerernatsumickey [10月31日 16:46]

はじめまして。

>ちなみにtypeがfileのname属性に関して、よく参考書等ではuploadfileという名前が付けられてありphpでの変数が$uploadfileとしてあって、指定ファイルの名前が格納してある$uploadfile_nameとか、サイズを知る$uploadfile_sizeなどで画像ファイルに関する情報を取得していくと記述してありますが、そのname属性が例えばphotoである場合は、phpスクリプトでは$photo_nameや$photo_sizeで名前やサイズを取得できるようになるのでしょうか?その辺が今回のミスの発見につながるのかとも思いまして。

PHPのマニュアル(http://www.php.net/manual/ja/features.file-upload.php)にありますが、
受け取り側のスクリプトで $_FILES を利用されてみてはいかがでしょうか?

フォームのfileの名前がuploadfileでしたら、
 $_FILES['uploadfile']['name']
で送信元のファイル名を取得、といった具合に利用できます。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerhattimayya [11月1日 11:40]

お返事ありがとうございました。本当に感謝です。


>受け取り側のスクリプトで $_FILES を利用されてみてはいかがでしょうか? 
フォームのfileの名前がuploadfileでしたら、 
$_FILES['uploadfile']['name'] 
で送信元のファイル名を取得、といった具合に利用できます。


この情報を元に編集を加えてみた所、無事アップロードが出来ました。本当にありがとうございます。
ただ、同じ名前の画像ファイルがアップロードされない様に、microtime関数で以下の様にファイル名を自動生成する部分を入れているとエラーが発生します(画面が何も表示されないです)。

(フォームのfile名がphotoで、一時保存フォルダがphototmpの場合)
$mictime = $microtime();
$imagefile = substr($mictime, 11) . substr($mictime, 2, 6) . ".jpg";
move_uploaded_file($_FILES['photo']['tmp_name'], "phototmp/$imagefile");

この$imagefile~の記述を
$imagefile = $_FILES['photo']['name'];として一応そのままのファイル名でphototmpにコピーされるようにしています。

$microtime関数に問題があるのでしょうか…。
結局質問になってしまいまして申し訳ありませんが、何かお気付きの点がございましたらお願い致します。

この意見に回答する

ツリーへ TOPへ

A02 満足
answereredute [10月31日 20:04]

初心者との事で、一応確認がてらのご意見となりますけど
formに、enctype="multipart/form-data"という記述がありますでしょうか。
はじめてアップローダーを作った時、この指定が無くて動かずなんでだろう…とかしばらく悩み続けた過去が。
もし書いてないとするならば、natsumickeyさんが示しているURL内のソースを見て、追加してみて下さい。
 
>そのname属性が例えばphotoである場合は、phpスクリプトでは$photo_nameや$photo_sizeで名前やサイズを取得できるようになるのでしょうか?
natsumickeyさんと少し被ってしまい恐縮ですが
 
<input type="file" name="photo" />
 
というファイル指定部分を作ったならば
 
$_FILES['photo']['name'] →元ファイルの名前
$_FILES['photo']['size'] →ファイルサイズ
 
など、$_FILESの中に色々情報が入ってきます。
百聞は一見にしかず、print_r($_FILES); と確認画面の最初でテストがてら記述してみると、中身がどんな感じなのか一目でわかると思います。
逆にそこで情報が出てこない場合は、formの送信部分を確認した方がいいかもしれません。

この意見に回答する

ツリーへ TOPへ

A02-1
replyerhattimayya [11月1日 11:47]

お返事ありがとうございました。本当に助かりました。

きちんとFORM部分は確認・チェックをさせてもらいました。
さらに追記して頂いた$_FILESの件を参考にさせてもらい、編集してみました。
お陰様でアップロードは条件付ではありますが出来るようになりました。

今はnatsumickeyさんへのお返事でも書かせてもらいましたが、ファイル名のmicotime関数を使った自動生成の所を考えています。

もしアドバイスして頂ける事がございましたら、どうぞよろしくお願い致します。

この意見に回答する

ツリーへ TOPへ

A03 満足
answerernatsumickey [11月1日 13:33]

こんにちは。natsumickeyです。

>$mictime = $microtime();

とありますが、microtime() は関数ですので「$」はつけないでください。

画面が真っ白になってしまうのは、おそらくお使いのサーバのエラー出力レベルの設定で
エラーを表示しないようになっているのでは、と予測します。
デバッグの段階ではエラー表示したほうが役に立つと思いますので、
サーバの設定変更ができないのであれば、スクリプトのはじめに
error_reporting()を使ってエラー出力レベルを変更してみるのもいいかもしれません。

くわしくはマニュアルをご覧ください。
http://jp.php.net/manual/ja/function.error-reporting.php

がんばってください。

この意見に回答する

ツリーへ TOPへ

A03-1
replyerhattimayya [11月2日 14:22]

hattimayyaです。
いや~本当にありがとうございます。感謝です。
書いてみてみるものですね。natsumickeyさんに指摘して頂いた部分、
$micotime(); の「$」…………付けてました(^^;)

本当に助かりました。これでファイル名の自動生成もできるようになりました。
最後に少し気になったのですが、通常html等のホームページのファイルをftpソフトなどで
アップロードする時と違って、随分とアップロードするのに時間が掛かるみたいなのですが、
これで良いのでしょうか?
もしもっとアップロード時間を短縮する方法等があるのであれば、教えて頂きたいと思いました。

この意見に回答する

ツリーへ TOPへ

A04 満足
answereredute [11月2日 16:42]

無事できたようでなによりです。

仕組み的にFTPソフトでアップするよりは遅くなると思います。
(内部処理で色々やる分の時間)
この速度をあげるような設定は……無いと思います。

この意見に回答する

ツリーへ TOPへ

A04-1
replyerhattimayya [11月2日 19:32]

hattimayyaです。

御回答ありがとうございました。今後ともよろしくお願い致します。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)