回答編集履歴

2

リンク直接貼ってしまったので修正

2022/01/06 17:39

投稿

Iya712
Iya712

スコア158

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
  ftp_rawlist関数というのがあるらしいので、それ使えばカレントディレクトリにどんなファイルがあるか確認できると思います。
104
104
 
105
- https://www.php.net/manual/ja/function.ftp-rawlist.php
105
+ [ftp_rawlist関数の公式ドキュメント](https://www.php.net/manual/ja/function.ftp-rawlist.php)
106
106
 
107
107
 
108
108
 

1

質問について追記しました。

2022/01/06 17:39

投稿

Iya712
Iya712

スコア158

test CHANGED
@@ -41,3 +41,91 @@
41
41
  多分正しいパスにはなっていないと思います。
42
42
 
43
43
  出力されたカレントディレクトリからの相対パスに変更することで、対応できると思います。
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+ ####追記####
52
+
53
+ 例えば、サーバーのパス構造が以下のようだったとします。
54
+
55
+ /home/ftp1/public_html/img1.jpg
56
+
57
+
58
+
59
+ FTP ユーザーの権限では、/home/ftp1/
60
+
61
+ このディレクトリより上はアクセスできないようになってたとします。
62
+
63
+
64
+
65
+ この時、ftp_pwd()で返ってくる値がスラッシュのみだった場合、実際にサーバー上の
66
+
67
+ /home/ftp1/
68
+
69
+ を見ているということになります。
70
+
71
+
72
+
73
+ この場合、リネーム時に./img1.jpgと指定すると、
74
+
75
+ /home/ftp1/img1.jpg
76
+
77
+ こちらのファイルを探し、リネームしようとします。
78
+
79
+
80
+
81
+ ですが、img1.jpgの正しいパスは
82
+
83
+ /home/ftp1/public_html/img1.jpg
84
+
85
+ なので、ファイルが存在しない。No such file or directory.となります。
86
+
87
+
88
+
89
+ 正しくリネームさせるには、./img1.jpgではなく、./public_html/img1.jpgとする必要があります。
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+ ということで、そのftpアカウントのルートディレクトリ直下に、img1.jpgが存在するかを確認して、確認できなかったら正しいパスを指定してください。
100
+
101
+
102
+
103
+ ftp_rawlist関数というのがあるらしいので、それ使えばカレントディレクトリにどんなファイルがあるか確認できると思います。
104
+
105
+ https://www.php.net/manual/ja/function.ftp-rawlist.php
106
+
107
+
108
+
109
+ ```php
110
+
111
+ //リネーム
112
+
113
+ if( ftp_rename($ftp, $old_file, $new_file)){
114
+
115
+ print("リネームに成功しました");
116
+
117
+ }else{
118
+
119
+ print("リネームに失敗しました"); ←--------------こっちに来てしまう
120
+
121
+ $current = ftp_pwd($ftp);
122
+
123
+ $buff = ftp_rawlist($ftp, $current);
124
+
125
+ print_r($buff,true); //カレントディレクトリに格納されてるファイルが連想配列で返ってくる。
126
+
127
+
128
+
129
+ }
130
+
131
+ ```