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