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

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

ただいまの
回答率

89.13%

move_uploaded_file()について、failed to open streamエラーが出てしまいます。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 216

yukithunders

score 5

前提・実現したいこと

PHPで、DB(phpMyAdmin)に商品の追加、削除、更新ができるサンプルプログラムを作っています。
商品追加画面で、「商品名」「価格」『商品画像』を入力し、登録します。
ファイル選択から『商品画像』の選択をし、別の画像フォルダへの移動を行う際に、エラーが出てしまいます。

発生している問題・エラーメッセージ

move_uploaded_file()で、選択された画像を、画像をフォルダへ移動していますが、下記のエラーが出てしまいます。

<エラーメッセージ>
/Applications/XAMPP/xamppfiles/temp/phpNSoPUG
Warning: move_uploaded_file(./gazou/aspara.jpg): failed to open stream: Permission denied in /Applications/XAMPP/xamppfiles/htdocs/product/pro_add_check.php on line 55

Warning: move_uploaded_file(): Unable to move '/Applications/XAMPP/xamppfiles/temp/phpNSoPUG' to './gazou/aspara.jpg' in /Applications/XAMPP/xamppfiles/htdocs/product/pro_add_check.php on line 55

・エラー指摘されている行
55:move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']);

該当のソースコード

pro_add.php

<body>
  商品追加<br/>
  <br/>
  <form method="post" action="pro_add_check.php" enctype="multipart/form-data">
    商品名を入力してください。<br/>
    <input type="text" name="name" style="width:200px" ><br/>
    価格を入力してください。<br/>
    <input type="text" name="price" style="width:50px"><br/>
    画像を選んでください。<br/>
    <input type="file" name="gazou" style="width:400px"><br/>
    <br/>
    <input type="button" onclick="history.back()" value="戻る">
    <input type="submit" value="OK" >
  </form>
</body>


pro_add_check.php

<body>
  <?php
    $pro_name = $_POST['name'];
    $pro_price = $_POST['price'];
    $pro_gazou = $_FILES['gazou'];

    if ($_FILES['gazou']['error'] !== UPLOAD_ERR_OK) {
      exit('アップロードが失敗しました');
  }


    $pro_name = htmlspecialchars($pro_name);
    $pro_price = htmlspecialchars($pro_price);

    if($pro_name=='')
    {
      print'商品名が入力されていません。<br/>';
    }
    else
    {
      print'商品名:';
      print $pro_name;
      print '</br>';
    }

    if($pro_price=='')
    {
      print'価格が入力されていません。<br/>';
    }

    if(preg_match('/^[0-9]+$/',$pro_price)==0){
      print '価格をきちんと入力してください。<br/>';
    }
    else
    {
      print'価格:';
      print $pro_price;
      print '</br>';

    }

    if($pro_gazou['size'] > 0)
    {
      if($pro_gazou['size'] > 1000000){
        print '画像が大きすぎます。';
      }
      else{
        print $pro_gazou['tmp_name'];
        move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']);
        print'<img src="./gazou/'.$pro_gazou['name'].'">';
        print '<br/>';
      }
    }

試したこと

エラーが出ている55行目の直前に、print $pro_gazou['tmp_name'];で読み込み元のファイルパスを表示しました。
/Applications/XAMPP/xamppfiles/temp/phpHaJuZI
上のパスは、環境により変動するとのことで、このパスが原因ではないと思いますが。

if ($_FILES['gazou']['error'] !== UPLOAD_ERR_OK)で、移動する前の画像のアップロード結果を確認していますが、問題なくアップロードされています。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

pro_add_check.php と同じ階層にgazouというディレクトリがないからでは。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/01/28 06:46

    pro_add.php, pro_add_check.php, gazouフォルダは、同じ階層に存在しています。

    キャンセル

  • 2020/01/28 07:08

    ではgazouフォルダのパーミッションですね。

    キャンセル

  • 2020/01/28 07:24

    gazouフォルダのeveryoneのアクセス権を<読み/書き>に変更したらエラーなく動作しました。

    キャンセル

  • 2020/01/28 07:30

    解決されたようで何よりです。
    これに限らずエラーをよく読むようにすると自分でも解決できるようになりますよ。
    https://qiita.com/cannorin/items/eb062aae88bfe2ad6fe5

    キャンセル

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

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

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