以前、さくらサーバのコントロールパネルの「ファイルマネージャー」でzipファイルを解凍しようとするとエラーが出てしまい、解凍できないトラブルがありました。
結局、ファイルマネージャーの機能を使わず(使えず)別な方法で解凍する事が出来たのですが、
もしかして解凍もダメなら圧縮もダメかも?と思い立ち、さくらのコントロールパネルの「ファイルマネージャー」でフォルダを圧縮しようとしたら、やっぱりエラーになってしまいました。
多分、解凍時にエラーが出るのと同じ理由で、ファイルが大きすぎるとタイムアウトになってしまうと思われます。
でも、解凍はphpのプログラムを使う事で出来たので、逆のパターン、圧縮する方法もあるはずだと思ったので調べてみました。
プログラムを試してみるとうまく行ったので、同じように大きなファイルの圧縮でエラーになり困っている方の参考になれば、そして今後のサーバ移転の時のためにも備忘録として残しておきます。
さくらのレンタルサーバのファイルマネージャーでZipファイルに圧縮できない現象
さくらのレンタルサーバでは、コントロールパネルの「ファイルマネージャー」から直接ファイルやフォルダをダウンロードする事が出来ます。
- さくらレンタルサーバのコントロールパネルにログインし、左サイドバーから「ファイルマネージャー」をクリック。
- ダウンロードしたいフォルダを右クリックし、「ダウンロード」をクリック。
- するとこのようなダイアログが出るので、アーカイブ形式を選んで「開始」をクリック、するとダウンロードが始まります。
1GBを超える大きなデータでも、数分でダウンロードされるはずです。
さらにさくらのレンタルサーバでは、さくらのコントロールパネルの「ファイルマネージャー」から、選択したファイル・フォルダを圧縮できる機能があります。
圧縮したいファイルやフォルダを選択して右クリックして「リモートで圧縮」を選択します。
すると、同じディレクトリにアーカイブファイルを作成してくれるのです。
ですが、試しにWordPressで構築しているサイトをフォルダごと圧縮してみると、「圧縮中・・・」という表示が2回繰り返された後、
3回目で力尽きた、とう感じでこのようなエラーが出ました。
解凍に続き、圧縮もダメです。やっぱりか。。。
「再読込」をクリックしても、全く同じ事が繰り返されるだけで改善されません。
ちなみに、静的サイトや容量の少ないフォルダは圧縮できました。
また、サーバの稼働状況によるのか、一回上手くいかなくても、また試すとうまく行く場合もありましたが、やはりデータ量が多い動的サイトは何度やっても同じで圧縮できませんでした。
「リモートで圧縮」が上手くいかなくても、「ダウンロード」を選ぶとその際に圧縮されてダウンロードできるので「リモートで圧縮」自体、使う事が無いかもしれません。
ですが、「ダウンロード」「リモートで圧縮」がどちらもうまく行かない場合は、「FilZilla」などのFTPソフトを使ってダウンロードする事になりますが、データが大きい場合はかなりの時間が掛かると予想されます。
さくらサーバでzipファイルが圧縮できない原因
正式に問い合わせたわけではありませんがたぶん、解凍できない症状と同様にファイルが大きすぎてタイムアウトになったと思われます。
さくらのファイルマネージャーでは、一定時間を超える処理を行った場合は処理を停止
する仕様になっているとの事。(その「一定時間」はどのぐらいなのかは不明)
この事から結局、さくらのファイルマネージャーでは大きなファイルのzipの解凍はもちろん、圧縮もできない、ということが推測されます。
ですが、phpを使用した解凍方法を見つけて試したところあっさり解凍出来たので、逆に圧縮する方法もあるはず、と探してみました。
今後も、サーバの引越し時などに使う事があると思うのでメモしておきます。
解凍方法はこちらです。
サーバー上でzipファイルを圧縮するには、phpを使う
さくらのレンタルサーバの「ファイルマネージャー」で大きなファイルやフォルダの圧縮時にエラーが出る場合は、PHPで書かれたスクリプトを実行するという方法で解決できました。
サーバー上でphpでフォルダを圧縮する方法
以下では例として、「〇〇〇.sakura.ne.jp/public」というフォルダーのファイルを全て圧縮する方法です。
流れとしては以下のようになります。
1.zip.phpを作成
2.圧縮したいフォルダ内に「zip」という名前のフォルダを作成しzip.phpをアップ
3.ブラウザから、zip.phpを呼び出す
zip.phpを作成する
以下をコピペし、必要箇所を修正します。
<?php //圧縮保存するファイル名。public.zipなどとなる。 $name = "public"; // このフォルダ以下のファイルを圧縮します。最後に / $this_file_path = __FILE__; $this_file_path = preg_replace('@zip/zip.php@s','',$this_file_path); $tempDir = "$this_file_path"; /////////////////////////////////設定ここまで // このフォルダにzipファイルを作ります。zipフォルダーは予め作成する必要有り。最後に / $filepath = $tempDir . "zip/"; // コマンド // cd:ディレクトリの移動 // zip:zipファイルの作成 -Pオプションでパスワードを設定 $command = "cd " . $tempDir . "; zip -r ".$filepath.$name.".zip ."; // 実行します exec($command); header("Content-type: text/html; charset=utf-8"); print<<<EOD 実行ファイルへのフルパス: EOD; echo __FILE__ ; print<<<EOD <br /> 完了 EOD; ?>
修正箇所
上の方にあるこの「public」という部分を、圧縮保存するファイル名に変更します。
(例)「aaa」とすると、aaa.zipという圧縮ファイルが作られます。圧縮したいフォルダの名前で良いと思います。
$name = "public";
書き換え後、zip.phpを保存します。
「unzip.php」を保存する時は、文字コードをUTF-8形式、BOMなし(TeraPadでは「UTF-8N」)で保存します。
圧縮したいフォルダ内に「zip」という名前のフォルダを作成
圧縮したいフォルダが「public」だとすると、その中に「zip」という空のフォルダを作成しておきます。
〇〇〇.sakura.ne.jp/public/zip
その「zip」フォルダー内に、先ほど作成したzip.phpをアップします。
〇〇〇.sakura.ne.jp/public/zip/zip.php
ブラウザから、zip.phpを呼び出す
あとは、Webブラウザからzip.phpにアクセスすると、プログラムが実行されて、ファイルを圧縮してくれます。
※URLはフォルダの位置とサーバーの仕様によって変わります。
ファイルが多い場合は数十秒画面が真っ白のままですが、焦らず少し待つと、ブラウザが以下のような表示になります。
さくらのコントロールパネルから「ファイルマネージャー」にアクセスしてみます。
zipフォルダ内に圧縮ファイルが作成されています。
その圧縮ファイル(zip)を右クリックしてダウンロードできます。
これで完了です。