ブログやホームページの運営に欠かせないFTPソフト。
中でもFileZillaは視覚的にも分かりやすくて一番人気です。
私も愛用しています。
ところが、ある日、WordPressを指定したバージョンにダウングレードしたくてFileZillaを使ってwp-adminを転送していたら、やたらと「ターゲットファイルは既に存在しています」というポップアップウインドウが出るではありませんか。
これ、上書き更新している時なら迷わず上書きを指定するだけですが、今回はターゲットのフォルダを丸ごと消してからアップロードしたのでファイルがある訳無いのです。
謎の現象です。
どうしても納得が行かなかったので、徹底的に調べました。
専門的な話も出てきますが、本記事では原因・切り分け・対処方法と順を追って説明していますので、最後まで読んでみて下さい。
発生条件
まずは、もう一度やってみて起きるのか? 他のファイルでも起きるのか? を調べてみました。
すると、
・WordPressのwp-adminなら、何度やっても起きる。(再現性あり!)
・別のファイルで試すと、起きたり起きなかったりする。
こんな結果に・・・。
最初は、media-widgets.jsなどのJavaScriptファイルでばかり起きるので、サーバが攻撃を受けていると勘違いして拒否しているのかと思ったのですが、何回かやってみるとcssファイルでも起きました。
特定のファイルで起きるというわけでも無いようです。
また、送るファイルが少ないと、全く事象は起きませんでした。
今回のWordPressのように、ある程度のまとまった複数ファイルを一気に転送しようとした時に起きるようです。
どれくらいの量のファイルから起きるのかを調べてみた所、全部のファイル転送に1分以上かかる時に起きるようでした。
ということは何かタイムアウトが関与しているということです。
またファイルを小分けに送ることで対処することも可能となります。
他のFTPソフト(原因切り分け)
FileZillaで駄目なら、FTPのアプリケーションはまだまだありますので、他のFTPソフトを試してみました。
その結果はこうなりました。
・WinSCPでは起きない
・ffftpでは似た現象が起きた
という訳で、原因分からなくてもいいや! って人は、ここでWinSCPに変えちゃっても良いと思います(笑)。
その証拠に、私は今、FileZillaをやめて、WinSCPを使っちゃってます。
WinSCPは、FileZillaと比べると機能が多くて、初心者は戸惑うかも知れませんが、分からない機能は使わなければ良いだけで、意外と画面もシンプルで良かったです。
あとはFileZillaで設定してあったサーバ情報を自動で取り込んでくれる機能が付いていて、至れり尽くせりといった感じです。オススメですね。
一方のffftpですが、サーバから切断されましたという謎のメッセージを残しつつ、何とか最後までやりきりました。
ただ、途中で確認のポップアップウインドウが出る時もありました。
ffftpとFileZillaは目に見える事象が違うだけで、根本原因は同じと考えられます。
ということで対処方法の1つは「WinSCP」を使うことです。
今回出てきた3つのFTPソフト「FileZilla」「FFFTP」「WinSCP」については、↓以下の記事で速度比較も行っています。
参考にしてみて下さい。
FTPソフト速度比較!「FileZilla」「FFFTP」「WinSCP」
発生原因
原因を調べるために、ffftpとFileZillaのログを調べてみました。
すると
「エラー: サーバーから切断されました: ECONNABORTED - 接続が閉じられました」
こんなメッセージが出たタイミングで、一連の上書きを確認するポップアップメッセージが表示されることが分かりました。
発生の原因(メカニズム)はこうです。
・ファイルAのファイルノードを作成した(サイズ0で)
↓
・ECONNABORTEDが発生してサーバとの切断が切れた
↓
・FTPソフトが再接続を試みる
↓
・無事、再接続される
↓
・ファイルAを、もう一度転送しようとする
↓
・ファイルAが既に存在する
↓
・上書きの確認ポップアップが出る
こういう事です。
ECONNABORTEDというサーバからの切断がFTPで発生する原因の1つにタイムアウトがあります。
通信中なのにタイムアウトが起きるのは不思議と思いますよね。
その理由はFTPは2つの接続を使うからなんです。
FTPの接続(セッション)の仕組みについては↓以下のInfraExpertの記事に説明を委ねます。
今回は1つのセッションで通信中だったけど、もう1つのセッションが定期的にタイムアウトして切断するためにファイルの再送が発生して「上書き」という事象が起きたいうことです。
今回、media-widgets.jsというファイルで事象が頻発しましたが、ファイルは何でも構いません。
ある程度大きなファイルであれば、転送に時間がかかりますので、途中でタイムアウトが発生して通信が切れれば、同じ事象が起きます。
WinSCPで事象が起きない理由は「1ファイル毎に2つのセッションを接続し直している」からでした。
丁寧なファイル転送方法ですが、ちょっとだけ時間がかかるというのが欠点ですね。
ということで上書き確認のポップアップが出てしまう原因はFTPのタイムアウトだった・・ということです。
対処方法
原因も出揃ったので、対処方法を全部で3つ、まとめて記載します。
上書き/常にこの動作を利用する
自分はマニアではないので、とりあえず対処できれば良いという方にオススメするのは、FileZillaで今回のポップアップが出たら。
動作:■上書き
■常にこのアクションを利用する
■現在のキューのみに適用する
この3つにチェックを入れてOKしてしまうことです。
そうすれば今回の作業では無条件で上書きしてくれてファイルが途中で切れたりしません。
ファイルを小分けに送る
WordPressみたいに階層型の沢山のファイルを転送すると起きやすいので、事象が起きないように転送したいのであれば、もう少しフォルダやファイルを小分けにして、ファイル転送すれば発生しなくなります。
1つの親フォルダで駄目な場合は、その下の子フォルダを分けて転送すれば大丈夫になります。
欠点は「面倒くさい」という事です。
WinSCPを使う
私が選んだ対処方法がこちらになります。
WinSCPはFileZillaと同じく多くの人が使っているFTPソフトです。
機能が豊富で詳しい人向け・・と言われますが、私はそんなに使いにくいと思いませんでした。
ファイルを1つ1つ丁寧に送ってくれる良いソフトだと思いましたので、「上書き」という操作にピクッ!と過剰反応するタイプの人(私はそうですw)は、この対処方法を選ぶことが絶対の安心感です。
以上、FileZillaで「ターゲットファイルは既に存在しています」と出てしまう時の対処法をまとめました。
コメント