質問編集履歴

4

追記

2017/06/06 14:52

投稿

ryo-dev
ryo-dev

スコア437

test CHANGED
File without changes
test CHANGED
@@ -45,3 +45,63 @@
45
45
 
46
46
 
47
47
  問題は、for文で使われていない数字まで回すところが上手くいきません。
48
+
49
+ ###追記
50
+
51
+ ```php
52
+
53
+ // もし同じファイル名があったら
54
+
55
+ $fname = $_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id;
56
+
57
+ if(file_exists($fname.".png")){
58
+
59
+ // フラグ
60
+
61
+ $flg = true;
62
+
63
+ // ループ回数の変数
64
+
65
+ $i = 1;
66
+
67
+ // 使われていない数字までループを回す
68
+
69
+ while($flg){
70
+
71
+ if(!file_exists($fname.'_'.$i.'.png')){
72
+
73
+ //重複する画像のリネーム処理
74
+
75
+ rename($fname.".png", $fname."_".$i.".png");
76
+
77
+ //$fname.'_'.$i.'.png'でネーミング
78
+
79
+ $flg =false;
80
+
81
+ }else{
82
+
83
+ // ループ回数増加
84
+
85
+ $i++;
86
+
87
+ }
88
+
89
+ }
90
+
91
+ }
92
+
93
+
94
+
95
+ // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、ファイルを保存する
96
+
97
+ $path = sprintf($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png");
98
+
99
+ if (!move_uploaded_file($_FILES['upfile']['tmp_name'], $path)) {
100
+
101
+ throw new RuntimeException('ファイル保存時にエラーが発生しました');
102
+
103
+ }
104
+
105
+ chmod($path, 0644);
106
+
107
+ ```

3

追記

2017/06/06 14:52

投稿

ryo-dev
ryo-dev

スコア437

test CHANGED
File without changes
test CHANGED
@@ -2,16 +2,46 @@
2
2
 
3
3
  ```php
4
4
 
5
- $nu;
5
+ // もし同じファイル名があったら
6
6
 
7
- for($i = 0; file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$i.".png") === true; $i++){
7
+ if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png")){
8
8
 
9
- // ループ回数を代入(使われていない
9
+ // ループ回数の変
10
10
 
11
+ $nu;
12
+
13
+ // 使われていない数字までループを回す
14
+
15
+ for($i = 0; file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$i.".png") === true; $i++){
16
+
17
+ // ループ回数を代入(使われていない数)
18
+
11
- $nu = $i;
19
+ $nu = $i;
20
+
21
+ }
22
+
23
+ rename($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png", $_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$nu.".png");
12
24
 
13
25
  }
14
26
 
27
+
28
+
29
+ // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、ファイルを保存する
30
+
31
+ $path = sprintf($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png");
32
+
33
+ if (!move_uploaded_file($_FILES['upfile']['tmp_name'], $path)) {
34
+
35
+ throw new RuntimeException('ファイル保存時にエラーが発生しました');
36
+
37
+ }
38
+
39
+ chmod($path, 0644);
40
+
15
41
  ```
16
42
 
43
+ もし、ファイルが投稿されて、ファイルを保存する祭に、同じファイル名のファイルがあったら、そのファイルに対してファイル名_連番.pngというふうに名前を変えて、保存したいです。そのあとに、送信された画像が、ファイル名.pngで保存できますよね
44
+
45
+
46
+
17
- 同じファイル名が存在したら数字を増やしていって、まだ使ていない数字までループをしたいのですが、どうすればいですか?
47
+ 問題はfor文で使われていない数字まで回すところ上手くきません。

2

変更

2017/06/06 13:38

投稿

ryo-dev
ryo-dev

スコア437

test CHANGED
@@ -1 +1 @@
1
- 画像を保存(ファイル名が被ったら◯◯_連番.png保存)
1
+ ファイル名に使われていない数字まループ
test CHANGED
@@ -2,46 +2,16 @@
2
2
 
3
3
  ```php
4
4
 
5
- // もし同じファイル名があったら
5
+ $nu;
6
6
 
7
- if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png")){
7
+ for($i = 0; file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$i.".png") === true; $i++){
8
8
 
9
- // ループ回数の変
9
+ // ループ回数を代入(使われていない
10
10
 
11
- $nu;
11
+ $nu = $i;
12
12
 
13
- // 使われていない数字までループを回す
14
-
15
- for($i = 0; file_exists($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$i.".png") === true; $i++){
16
-
17
- // ループ回数を代入(使われていない数)
18
-
19
- $nu = $i;
20
-
21
- }
13
+ }
22
-
23
- rename($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png", $_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$nu.".png");
24
-
25
- }
26
-
27
-
28
-
29
- // ファイルデータからSHA-1ハッシュを取ってファイル名を決定し、ファイルを保存する
30
-
31
- $path = sprintf($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png");
32
-
33
- if (!move_uploaded_file($_FILES['upfile']['tmp_name'], $path)) {
34
-
35
- throw new RuntimeException('ファイル保存時にエラーが発生しました');
36
-
37
- }
38
-
39
- chmod($path, 0644);
40
14
 
41
15
  ```
42
16
 
43
- どうも、for文がうまく動いていないみたいで、仕事をしてくれません。
44
-
45
- 一番はじめは◯◯.pngで保存して行くんですが、2枚め以降重複してきたら、◯◯_連番.pngで保存していきたいと思ってます。
46
-
47
- なのでfor文で使っていない数字を見つけたいのですが、書き方がこれじゃダメみたいです。どうすればいいですか?
17
+ 同じファイル名が存在したら数字を増やしていって、まだ使っていない数字までループ回したいのですが、どうすればいいですか?

1

編集

2017/06/06 13:14

投稿

ryo-dev
ryo-dev

スコア437

test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  }
22
22
 
23
- move_uploaded_file(sprintf($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png"), sprintf($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$nu.".png"));
23
+ rename($_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id.".png", $_SERVER['DOCUMENT_ROOT'] . '/../users/icons/'.$app->me()->id."_".$nu.".png");
24
24
 
25
25
  }
26
26