質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.98%

  • PHP

    17807questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

phpで画像ファイルがアップロードできない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 347

bigin

score 50

やりたいこと

フォームからPOSTで送信した<画像>と<値>を受け取って、
<画像>→指定したファイルにアップしたい
<値>→テキストファイルにして、出力したい

フォームhtml

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>プレゼント入力フォーム</title>
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="form.css" >
    <script src="js/bootstrap.min.js"></script>
</head>
<body>
<form action="present_index.html" method="post" class="form" align="left" enctype="multipart/form-data"> 
<div class="form-group">
商品名
<input type="text" name="name" placeholder="商品名" class="form-control" required>
</div>
<div class="form-group">
商品説明<br>
<TEXTAREA name="introduce" maxlength="150" cols="40" rows="6" wrap="off" required></TEXTAREA>
</div>
 <div class="form-group">
画像
<input type="file" name="image" required>
</div>
 <div class="form-group">
会社名
<input type="text" name="companyname" placeholder="会社名" class="form-control" required maxlength="2">
</div>
<div class="form-group">
URL 
<input type="url" name="url" value="" class="form-control">
</div>
<button type="submit" class="btn btn-default registration">登録</button>
</div>
</form>
</body>
</html>

フォーム送信先のphpファイル

<?php
$upload = "/Applications/XAMPP/xamppfiles/htdocs/festa";
if(!file_exists($upload)){
    mkdir($upload,755,true)
};
move_uploaded_file($_FILES['image'],$upload);
touch('answer.txt');
$file ='answer.txt';
$value = $_POST['name']."\t".$_POST['introduce']."\t".$_POST['gazou']."\t".$_POST['companyname']."\t".$_POST['url']."\n";
file_put_contents($file, $value, FILE_APPEND | LOCK_EX);
echo "投稿完了しました";
?>

結果として、festaというファイルもanswer.textというテキストも生成されず、「投稿完了しました」ともブラウザに表示されません。

MacでXAMPPを使っています。
php記述内に不備があるかと考えているのですが、ご教示いただけますと幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • bigin

    2017/09/11 23:43

    html部分を提示させていただきました。

    キャンセル

  • bigin

    2017/09/11 23:44

    エラーログについてですが、XAMPPのlogsファイルの内のerror_logを見るということでいいでしょうか?すみません、エラーの確認方法がいっぱいでどれがどれやら理解できておらず

    キャンセル

  • bigin

    2017/09/12 00:10

    下記を理解して実行すれば、とりあえずは問題ないでしょうか?http://ysklog.net/php/4181.html

    キャンセル

回答 2

+1

move_uploaded_fileの第一引数で$_FILE['image']としていますが
少なくともtmp_nameを指定してあげないと処理がおかしいと思います

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/11 23:45

    ありがとうございます。しかし、tmp_nameを指定しても結果が変わりませんでした。

    キャンセル

checkベストアンサー

0

yambejpさんのいうとおり、tmp_name の指定がないと一時ファイルの場所がわかりません。
また、下記のようにしないと保存先のファイル名がないので、フォルダに上書きしようとして
エラーになるので、期待した結果にはならないと思います。

$out = $upload.'/'.basename($_FILES['image']['name']);
$ret = move_uploaded_file($_FILES['image']['tmp_name'], $out);

また、move_uploaded_fileの戻り値も確認した方がいいと思います。

if (!$ret) {

echo 'ファイルの取得失敗';
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/12 09:32

    ありがとうございます。よく理解できました。やって見たのですが、結果として、festaというファイルもanswer.textというテキストも生成されず、「投稿完了しました」ともブラウザに表示されません。。。何か他に原因がありそうですね。。。

    キャンセル

  • 2017/09/12 10:19

    確認ですが、サンプルの記述はすべて、present_index.html の中ですよね?

    セミコロン「;」の位置がまちがっているのと、パーミッション指定が違ってます。
    単にPHPのエラーなんでは?

    > if(!file_exists($upload)){
    > mkdir($upload,755,true)
    > };

    > if(!file_exists($upload)){
    > mkdir($upload,0755,true);
    > }

    キャンセル

  • 2017/09/13 21:22

    >サンプルの記述はすべて、present_index.html の中ですよね?
    はい、そうです。

    >セミコロン「;」の位置がまちがっているのと、パーミッション指定が違ってます。
    単にPHPのエラーなんでは?
    ご指摘ありがとうございます。確かに!でも、やはり表示されずm(._.)mエラーを出力してみます。

    キャンセル

  • 2017/09/15 08:48

    >>サンプルの記述はすべて、present_index.html の中ですよね?
    >はい、そうです。

    「フォームhtml」と「フォーム送信先のphpファイル」の内容は1つのファイル(present_index.html)に記述されていて。その部分を抜粋したのが「フォームhtml」と「フォーム送信先のphpファイル」ということで間違いないですか?

    前質問が正しいのでしたら、「やって見た」内容で「フォームhtml」と「フォーム送信先のphpファイル」の記述を変えてください。
    内容によっては理解してないのかもしれません。

    キャンセル

  • 2017/09/15 09:39

    パーミッションの問題もありましたね
    ユーザーとグループってわかりますかね?
    Apacheで動作するときは、その他のユーザになるので、
    0755だと、一番右の5が権限です。実行と読み込みしか許可してないので、書き込みができません。
    対処としては
    1.ファイルの書き込み先のフォルダのパーミッションを0777で作っておく
    2.ファイルの書き込み先のフォルダのパーミッションを0775で作り、グループ属性をapacheにする
    いずれかの対処が必要ですね。

    出典: phpのmove_uploaded_fileのエラーについて - Qiita
    http://qiita.com/sysy/items/fb25a84b3d130898cb46

    キャンセル

  • 2017/09/16 21:19

    お返事遅くなり大変申し訳ありません。

    「フォームhtml」と「フォーム送信先のphpファイル」の内容は1つのファイル(present_index.html)に記述→すみません、これは別ファイルに記述されています。

    パーミッションもありがとうございます。
    確認してみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    17807questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。