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

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

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

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

PHP

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

Q&A

解決済

2回答

5553閲覧

IIS環境へのPhpのファイルアップロードについて

Ruse

総合スコア13

IIS

IIS(Internet Information Services)はマイクロソフト社によって開発されたwebサーバーです。Windows上で動作します。

PHP

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

0グッド

0クリップ

投稿2016/08/24 06:05

編集2016/08/24 08:27

###前提・実現したいこと
phpを使用して、IIS環境化のサーバーにファイルアップロードを行い
アップロード先に同名ファイルがあった場合、上書きを行いたいです。
サーバーにはIIS7を設定済みです。
なお、通常のファイルアップロードは行われており、閲覧も可能です。
IISユーザーに(IUSRS)に対して書き込みのアクセス権を保持していることも確認しました。
よろしくお願いします。

###発生している問題
同じ名前のファイルをアップロードした際に、上書きがされない

###該当のソースコード
初版の変数部分が一部間違っておりました、申しわけありません。

php

1 2$filename = //アップロード時の日付と、上げるファイルのIDを指定しています 3//例)20160824_D1010 (日付_IDの形式です) 4 5if( isset( $_FILES["upfile"] ) ) 6 { 7 foreach( $_FILES["upfile"]["error"] as $key => $error ) 8 { 9 if( $error == UPLOAD_ERR_OK ) 10 { 11 $tmp_name = $_FILES["upfile"]["tmp_name"][ $key ]; 12 $name = $_FILES["upfile"]["name"][ $key ]; 13 $fileext1 = pathinfo($name, PATHINFO_EXTENSION); 14 15 $filename1 = $filename . '.' . $fileext1; 16 $upposition1 = 'data/' . "$filename1"; 17 18 move_uploaded_file( $tmp_name, "$upposition1" ); 19 chmod("$upposition1", 0666); 20 21 } 22 } 23}

###補足情報(言語/FW/ツール等のバージョンなど)
phpのバージョンはPHP 5.6.7です。

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

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

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

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

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

kunai

2016/08/24 07:12

肝心の「$upposition」はどこから来ているんでしょうか。 $filenameも拡張子しか付いてない気がしますが。
Ruse

2016/08/24 08:28

変数部分が間違っておりました。大変申しわけありません。 修正いたしました。
guest

回答2

0

自己解決

IUSR権限を改めてアップロード先のフォルダに対して付与したら正しく上書きされて動作しました。
IIS_IUSRS権限だけでファイルのアップロードが出来ていたのですが、ファイル上書きはIUSR権限が必要なのですね。phpからファイルアクセスする際のユーザーでIUSR権限が必要~といった記述がいくつかありました。

ありがとうございました。

投稿2016/08/25 07:41

編集2016/08/25 07:49
Ruse

総合スコア13

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

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

0

move_uploaded_fileを使うと、有無をいわさず上書きになるはずです。なので、ならないのは、関数実行時にファイル名を代入する変数がユニークになっている可能性が高いです。

気になるのは、

php

1$filename = //アップロード時の日付と、上げるファイルのIDを指定しています 2//例)20160824_D1010 (日付_IDの形式です)

この部分ですね。IDが自動的にユニークになるようにプログラムを作ったりしていないですか?

投稿2016/08/25 07:39

FKM

総合スコア3608

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

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

Ruse

2016/08/25 07:45

回答ありがとうございます。 同じ日に同じIDの物をアップした場合、ファイル名は同じになるようにしています。 結果として、IIS_IUSRS権限に加えて、IUSR権限を付与した所正しく上書きされるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問