FTPで大量ファイルのアップロードに失敗する時の対応方法

  • 投稿 : 2015-09-01
ZIPで圧縮してFTP転送した後に、サーバー側で解凍するというのが一番お手軽で確実かと思います。

1.レンタルサーバー側の機能を使う方法
2.PHPファイルを作成して、それを利用する方法
3.FTP転送後に、SSH接続(TELNET)して、UNZIPコマンドで解凍

やり方はいろいろありますが、比較的簡単な、1、2のやり方を書いておきます。

追記:2017/05/11
FFFTPで大量ファイルを転送すると途中で切断、おかしくなる場合の対応

「WindowsファイアウォールのステートフルFTPフィルタの設定」を変更すると、この現象が治るそうです。

追記:2017/01/27
どうしてもFTP転送したい場合は、1度に大量のファイル(数)を転送しないようにするというのが対策になると思います。
フォルダ単位に分けて転送するとか、ファイル名を数十個指定して転送するとかです。

あとはFTPソフトを変更して違うものにしてみるとか・・。ただ、頻度の問題であって、結局は同じ結果になるかも。
ほとんどはFTPの設定の問題でない別の問題だと思います。

1.レンタルサーバー側の機能を使う方法

ftp-upload01.png
レンタルサーバーによっては、ブラウザからファイル転送できる「ファイルマネージャー」とかそういう名前で機能が提供されていることも多く、その中で、ZIPファイルをアップロードすると、自動で解凍してくれるという機能が標準でついている場合があります。

管理画面をみて、その機能があればそういうのを使うのが簡単だと思います。

ロリポップ!FTP ファイルアップロード / ユーザー専用ページ / マニュアル - レンタルサーバーならロリポップ!
ファイルマネージャー - レンタルサーバーはさくらインターネット

さくらインターネット、ロリポップ、バリューサーバーあたりは、この機能があったと思います。

2.PHPファイルを作成して、それを利用する方法

ftp-upload02.png

1.ZIPファイルを作成する(ファイル名を、filename.zip)とする
2.unzip.phpを作成する
3.両方を同じフォルダにアップロードする
4.ブラウザから、unzip.phpを呼び出す

zipファイルをフォルダ構造のまま、Windowsの標準機能でもツールでもよいので作成します。
最後に、ブラウザから、http://example.com/unzip.php のような感じで呼び出します。
※URLはフォルダの位置とサーバーの仕様によって変わります。

unzip.phpは以下のようなファイルです。

unzip.php

<?php
// インストールに先立ってZIPファイルをサーバー上で展開するスクリプト。
// ZIPファイルとこのファイルを同じディレクトリにアップ。
// アップ先ディレクトリにそのまま展開されます。
// 展開される際にこのファイルと同じ名前のファイルが有る場合は予めこのファイル名を変えておく。
$zipfilename = 'filename.zip'; // 展開するzipファイルを指定。
$zip_file = getcwd().'/'.$zipfilename;
 
if(!is_file($zip_file)) exit("No zipped file: $zip_file on your server!");
 
function unzip($zip_file){
 return shell_exec("unzip $zip_file");
}
 
if($zip = unzip($zip_file)){
 echo '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>ZIP解凍</title></head><body>';
 echo "Zip解凍<br />\n";
 echo "対象ファイル:$zipfilename<br />\n";
 echo '<div style="overflow:auto; height:400px; border: #999 1px solid; margin:15px;">';
 echo "<pre>$zip</pre></div>\n";
 echo "$zipfilename: は正常に解凍されました。<br />\n";
 echo '</body></html>';
} else{
 echo("Failed to extract: $zip_file\n");
}
?>

解凍するファイルが「filename.zip」でない場合は、その部分を変更してください。
ファイルの場所(絶対パス)は「getcwd()」で取得しているために、同じフォルダに置くだけで認識できます。

実際に動作させているのは、「shell_exec("unzip $zip_file");」という部分で、unzipというコマンドを呼び出しています。通常はパスが通っていてこのままで動作するのですが、うまくいかない場合はこのあたりも見直す必要があるかと思います。いまどき、共用のレンタルサーバーで動作しないってことはないとは思います。


ソース(unzip.php)の出所について

サーバ上でZIP展開 - サイト -CUBIC4

たぶん、2010年ごろに「ライセンス : GPL2.0)」で公開されていたものだと思います。
残念ながらインターネットアーカイブにしかなく、また実際のファイルがDLできません。

レンタルサーバー上でzipファイルを解凍するには | a weblog by k1">PCテクニック集:【PHP】サーバー上でzipを解凍する方法
レンタルサーバー上でzipファイルを解凍するには | a weblog by k1
の記事で紹介されているソースを合体させました。

2013/10:PHPで圧縮ファイル展開方法

上記記事では、合体させたということなので、上の部分が今回のものだと思います。

サーバ上でZIP展開
http://www.cubic4.net/blog/34-site/68-server-unzip.html
レンタルサーバー上でzipファイルを解凍するには | a weblog by k1

ここでもコメント部分の一致が見られるので、上記に間違いないでしょう。

その他、参考になるサイト

自分でいろいろ試行錯誤したい人は以下も参考になるかも。
レンタルサーバー上でZipファイルを解凍する - ちょっとした忘備録
サーバー上でフォルダをzip/unzipする方法 - phpnoviceの日記
コマンドでlolipopにアップロードしたzipファイルを解凍する_技術三昧ブログ_zanmai.net
ppBlogをサーバー上でZIP展開
レンタルサーバでparse error: syntax error | 株式会社woodsmall(ウッズモール)
スポンサーリンク