FTPでファイルをアップロードしたのに、サーバー側で見るとファイルサイズが0バイトになっている——そんな経験はありませんか。

再アップロードすれば直ることが多いので「たまたま」で片付けがちですが、これは原因がはっきりしている現象です。今回、クライアントサイトの画像を一括アップロードした際に実際に0バイトファイルが発生したので、原因の切り分け方と具体的な対策をまとめます。


症状

  • 画像やSVGなど、複数の小さいファイルをまとめてアップロードした
  • FTPクライアント上は「転送完了」と表示される
  • サーバー側でファイル一覧を見ると、一部だけサイズが 0 になっている
  • 再アップロードすると正常なサイズで上書きされ、直る
  • 毎回ではなく「時々」発生する

この「時々」「再アップロードで直る」という点が、原因を特定する上でのヒントになります。

原因① 同時接続数の上限超過(一番多いケース)

FileZillaやTransmitなどのGUI系FTPクライアントは、転送を高速化するために複数のデータコネクションを同時に開いて並列アップロードします。

多くのFTPサーバーの実装では、ファイル転送の際に

  1. まずリモート側に空(0バイト)のファイルを作成する
  2. そこにデータを書き込んでいく

という順序で処理が進みます。

ここで、

  • サーバー側が許可している同時接続数の上限を超えた
  • 回線が瞬断した
  • サーバーが高負荷でデータコネクションの確立に失敗した

といったことが起きると、ファイルの作成までは成功するのに、中身の書き込みが始まる前後で接続が切れてしまい、0バイトのファイルだけがサーバーに残ることになります。

多くのレンタルサーバーは1アカウントあたりの同時接続数に制限をかけており、特にヘテムルのような共有サーバーは上限が低めに絞られている印象があります。アップロードするファイル数が多いほど、どれか1つがこの上限に引っかかる確率も上がるため、「大量の小さいファイルを一括転送したときだけ、たまに0バイトが混じる」という今回のような状況になりやすいわけです。

原因② サーバーのディスク容量オーバー

もう一つ知られている原因が、契約しているサーバーのディスク使用量が上限に達しているケースです。容量オーバーの状態でアップロード(特に上書き)すると、元々あった正常なファイルまで0バイトで上書きされてしまうことがあります。

こちらは同時接続数の問題とは仕組みがまったく異なるので、まずはサーバーのコントロールパネルでディスク使用量に余裕があるかを確認しておくと、原因の切り分けが早くなります。余裕があるなら、原因①を疑うのが近道です。

対策:FTPクライアントの同時接続数を制限する

原因①への対策はシンプルで、FTPクライアント側の並列転送数を減らすことです。

FileZillaの場合

サイトマネージャーの「転送設定」タブを開き、

  1. 「同時接続数を制限する」にチェックを入れる
  2. 「最大接続数」を 2 に設定する

これだけで発生頻度はかなり下がります。それでも0バイトが出るようなら、「1」まで落として完全に直列転送にすると確実です(転送速度は遅くなります)。

運用面の対策

  • 大量のファイルを一括アップロードした後は、サーバー側のファイル一覧でサイズが0になっているものがないか確認する
  • 重要なファイルは、アップロード後にブラウザで実際に開いて表示確認する

FTPクライアント側もサーバー側も「転送エラー」として明確に警告してくれないことが多いため、気づかずに公開してしまうのが一番厄介です。同時接続数を絞ったうえで、アップロード後の目視チェックを習慣にしておくのが安全です。