質問: ### 前提・実現したいこと xampp環境でphpを学習しています。 ファイル(png)をサーバーにアップロードしたいのですが、うまくいかず原因もつかめず困っています。 分かるかたいらっしゃいましたらお教えください...。 ### 考えられる原因と対策 1.コードのタイプミス 自分で書いたコードを一度消して、ウェブからコードをコピペしてきましたがうまくいきませんでした。 2.フォルダのアクセス拒否?(パーミッションの設定) ファイルをアップロードしたいフォルダを右クリック>プロパティ>セキュリティタブの編集>全ユーザーの「フルコントロール」にチェックを入れましたがうまくいきませんでした。 ディレクトリ構成は以下のようになっています。 ![![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/3810559f2bb4e6aa944aac6fb59e5f2c.png)](3ba682f780c2ffda04c96365180dc4bf.png) ### ソースコード kanri_index_imgtest.php(kanriフォルダ内) ``` アップロード ``` sent_imgtest.php(kanriフォルダ内) ```
回答: 惜しいところまでいってますね。 ひとまず、move_uploaded_file()の第2引数はファイル名も含める必要がありますので、 任意の名前をつけると良いです。 例: ``` // ファイルの保存先 $uploadfile = '../img/hogehoge.png'; // アップロードされたファイルに、パスとファイル名を設定して保存 move_uploaded_file($_FILES['upload']['tmp_name'], $uploadfile); ``` ~~ただkanri/sent_imgtest.php となっているのであれば変な感じはしますね・・・。~~ 例えば、階層を明確に参照できるようにするため、下記のようにしてはどうでしょうか? ``` // ファイルの保存先 $uploadfile = __DIR__.'/../img/hogehoge.png'; ``` *DIR*は記述のあるファイルの存在するディレクトリとなります。 これで確実に、kanri/フォルダからの相対パスで指定ができるはず。 ※hogehoge.png部分は自身でつけてあげてださい。 > > 試しにアップロード先のパスを > > $uploadfile = './img/'; > > としたところ、kanriフォルダ内にimgという拡張子のない謎のファイルがアップロードされ、 > > > "./" だと「自身と同じ階層から」という指定になるので当該の現象になったわけですね。 第2引数にファイル名が含まれていないのでフォルダのようなファイルが出来上がったわけです。 (ただしtmpファイルから作ってるので中身自体は指定した画像のはず)