• ベストアンサー

繰り返しファイルをアップロードしたい。

for($w=5;$w<$all_gyou;$w++){ $fnme = $folder_name."/".$fnme; open OUT,">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; print "完了<BR>\n"; }#for のようにして、アップロードを行いました。 回数分きちんと 「完了」 は表示されますが、アップロードは1回目のみしか行われません。 ということはforの文が間違ってるということでもなさそうなのですが…。 書き込みは特別1回しかできないものなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.2

まず、どのような名前・パスのファイルが生成されることを期待されているのでしょうか? forループに入ったときの変数が、下記の様な状態だった場合、 $fname : "hoge.txt" $folder_name : "abc" ↓こんな感じのファイルを書込むようなプログラムになっています。 カレントディレクトリ/abc/hoge.txt カレントディレクトリ/abc/abc/hoge.txt カレントディレクトリ/abc/abc/abc/hoge.txt カレントディレクトリ/abc/abc/abc/abc/hoge.txt カレントディレクトリ/abc/abc/abc/abc/abc/hoge.txt ディレクトリが存在しない場合は書込めませんので、forループに入る前にこの様な階層のディレクトリがあらかじめ存在しなければなりません。

w-inty
質問者

お礼

回答ありがとうございます。 自分としては 1回目 $fname : "hoge.txt" $folder_name : "1abc" 1回目 $fname : "hoge.txt" $folder_name : "2abc" ↓ カレントディレクトリ/1abc/hoge.txt カレントディレクトリ/2abc/hoge.txt というようなつもりで書いたのですが…。 ためしに 1abcの下に2abcを作成して、実行してみましたが、特に2abcの中にはファイルは作成されませんでした。 (1abcの中には作成されました。)

w-inty
質問者

補足

無事解決しました。 ありがとうございました。

その他の回答 (1)

noname#9431
noname#9431
回答No.1

ざっと見ただけですが、 ループのなかでファイル名が変ってないのでは? つまり上書き。

w-inty
質問者

お礼

回答ありがとうございます。 ためしに $fnme = "1" . $fnme . $file_time . $file_type; $fnme = $folder_name."/".$fnme; open OUT,">$fnme"; binmode OUT; print OUT $in{'upfile'}; close OUT; print "$folder_name 完了<BR>\n"; と書き出してみたところ、書きこみを行いたいフォルダ名がきちんと表示されてきました。 ということはちゃんと$folder_nameはかわっている、ということなのではないのでしょうか?

関連するQ&A