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

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

新規登録して質問してみよう
ただいま回答率
85.48%
phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

1回答

2700閲覧

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

yukithunders

総合スコア5

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2020/01/27 00:28

編集2020/01/27 21:43

前提・実現したいこと

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

php

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

pro_add_check.php

php

1<body> 2 <?php 3 $pro_name = $_POST['name']; 4 $pro_price = $_POST['price']; 5 $pro_gazou = $_FILES['gazou']; 6 7 if ($_FILES['gazou']['error'] !== UPLOAD_ERR_OK) { 8 exit('アップロードが失敗しました'); 9 } 10 11 12 $pro_name = htmlspecialchars($pro_name); 13 $pro_price = htmlspecialchars($pro_price); 14 15 if($pro_name=='') 16 { 17 print'商品名が入力されていません。<br/>'; 18 } 19 else 20 { 21 print'商品名:'; 22 print $pro_name; 23 print '</br>'; 24 } 25 26 if($pro_price=='') 27 { 28 print'価格が入力されていません。<br/>'; 29 } 30 31 if(preg_match('/^[0-9]+$/',$pro_price)==0){ 32 print '価格をきちんと入力してください。<br/>'; 33 } 34 else 35 { 36 print'価格:'; 37 print $pro_price; 38 print '</br>'; 39 40 } 41 42 if($pro_gazou['size'] > 0) 43 { 44 if($pro_gazou['size'] > 1000000){ 45 print '画像が大きすぎます。'; 46 } 47 else{ 48 print $pro_gazou['tmp_name']; 49 move_uploaded_file($pro_gazou['tmp_name'],'./gazou/'.$pro_gazou['name']); 50 print'<img src="./gazou/'.$pro_gazou['name'].'">'; 51 print '<br/>'; 52 } 53 }

試したこと

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

投稿2020/01/27 00:38

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yukithunders

2020/01/27 21:46

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

2020/01/27 22:08

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

2020/01/27 22:24

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問