- ベストアンサー
繰り返しファイルをアップロードしたい。
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回しかできないものなのでしょうか?
- みんなの回答 (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ループに入る前にこの様な階層のディレクトリがあらかじめ存在しなければなりません。
その他の回答 (1)
ざっと見ただけですが、 ループのなかでファイル名が変ってないのでは? つまり上書き。
お礼
回答ありがとうございます。 ためしに $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はかわっている、ということなのではないのでしょうか?
お礼
回答ありがとうございます。 自分としては 1回目 $fname : "hoge.txt" $folder_name : "1abc" 1回目 $fname : "hoge.txt" $folder_name : "2abc" ↓ カレントディレクトリ/1abc/hoge.txt カレントディレクトリ/2abc/hoge.txt というようなつもりで書いたのですが…。 ためしに 1abcの下に2abcを作成して、実行してみましたが、特に2abcの中にはファイルは作成されませんでした。 (1abcの中には作成されました。)
補足
無事解決しました。 ありがとうございました。