PHPコード

【レンタルサーバ】大量のファイルを短時間でアップロード・ダウンロードする方法

2021年3月19日

ファイル転送ソフト(WinSCP、CyberDuck、FFFTPなど)を使い、大量のファイルをレンタルサーバにアップロードすると、
ネットはそんなに遅くないのに、転送完了までに異様に時間がかかりませんか?
これはファイルを1つアップロードする毎に、その都度サーバにコマンドを送信しているからです。

もっと早くアップロードを完了させたい。そんな時に使える方法を書いてみました。

たとえばこんなとき…。使用例

レンタルサーバにて、WordPressを好きなバージョンで手動インストールするとき。
私の場合は、WordPress最新メジャーバージョンの1つ前のバージョンを、Xサーバによくインストールします。
最新メジャーバージョンは不具合が出る場合もあるので、極力避けるようにしています。
自分のパソコンで解凍して、サーバにアップロードすると、結構時間がかかるんです。

※Xサーバの「WordPressかんたんイントール」は最新バージョンが入るため、私はその方法は使いません。

目次

・まず結論
・手順

  1. zip圧縮された状態のファイルを入手(作成)
  2. ZIPファイルをアップロード
  3. Linuxコマンドを叩けるPHPプログラムを作成
  4. 作成したプログラムからLinuxコマンドを実行
  5. ファイル転送ソフトで解凍されたファイルを確認する

・まとめ

まず結論

ファイルが大量にある時、1個の圧縮ファイルにして転送をすれば時間が短縮できます。
転送後は、Linuxコマンドでファイルを解凍してやれば、ほぼ一瞬で解凍できます。
(通信速度に問題がないことが前提)

しかし、teraTerm(windows)や、iTerm2、ターミナル(Mac)などを使い、サーバにSSH接続してコンソール画面を使うのは面倒くさい。
どうせなら、ブラウザでやってしまおう、そんなことを考えたのがこのお話しです。

手順

<1.zip圧縮された状態のファイルを入手(作成)>
ここでは、ZIP圧縮されたファイルとして、WordPressの公式サイトから、入手したものを使います。
https://ja.wordpress.org/download/releases/
私の場合は、zipファイルを入手します。

例えば、WordPressではなく1つのファイルに圧縮されていない他のファイル群を使う場合は、
ローカル環境(自分のパソコン)でZIP圧縮しておきましょう。

<2.アップロード>
上記1で圧縮したファイルをサーバにアップロードする。
最近のネット回線であれば、数10Mbps~数100Mbps程度のスピードが出るので、ファイルサイズが1GB以下であればすぐ転送が終わると思います。
圧縮するとファイルサイズも減らせますしね。
今の話題の様に、ファイルが数百~数千とか、沢山あると、通信速度が早くてもなかなか転送が終わりません。

<3.Linuxコマンドを叩けるPHPプログラムを作成>

 プログラム例:sample.php
<?php
header('Content-Type: text/html; charset=UTF-8');
?>
<form action="" method="post">
コマンド:<input type="text" name="cmd" value="<?=$_REQUEST["cmd"]?>" size="50"><br />
<input type="submit" value="送信">
</form><br />
<?php
if ( isset($_REQUEST['cmd']) && !empty($_REQUEST['cmd'])) {
echo '------------------------------------<br />';
echo 'コマンド:'.$_REQUEST['cmd'].'<br />';
echo '------------------------------------<br />';
$cmd = $_REQUEST['cmd'];
exec($cmd, $res);echo '<pre>';
print_r($res);
echo '</pre>';
}

<4.作成したプログラムからLinuxコマンドを実行>
sample.php をサーバにアップしてブラウザでアクセスしてみる。

ファイルを参照するコマンドを打ってみる。「ls -la」


※確認用に、Xサーバではない別のサーバを使っています。
Xサーバではroot権限はありませんので、適宜読替えてください。

ファイル転送ソフトで見てもこんな感じ。

※確認用に、Xサーバではない別のサーバを使っています。
Xサーバでは/var/www/html/という階層や、root権限はありませんので、適宜読替えてください。

 

ではここでwordpressのZIPファイルを解凍するコマンド打ってみる「unzip ./wordpress-5.5.3-ja.zip」

 

<5.ファイル転送ソフトで解凍されたファイルを確認する>
再度、ファイル転送ソフトで見てみると、「wordpress」というディレクトリが出来上がっている。

ここではwordprtessの話になってしまいますが、zipファイルを解凍後、wordpressというディレクトリが生成されて、その中にすべてのファイルが解凍されるます。そのままではアクセスする際は、http://example.com/wordpress/ こんなURLになってしまいますので。ファイルクライアントソフトで、ドメイン直下(ひとつ上の階層にファイルを纏めて移動するとよいと思います。
以降はwordpressの話になってしまうので、必要な場合だけ読んでください。

wordpressディレクトリの中身はこんな感じ。

1つ上の階層に移動して・・・。

すると中身がすっきり無くなるので、自分の上の階層に移動。

あとは空になった「wordpressディレクトリ」を削除してもOK

 

まとめ

使われ方としては限定的かもしれません。
しかしこのプログラムを作っておけば、
ファイル転送ソフトにログインユーザとパスワードを最初に設定するだけで、後はこのプログラムをアップして使うだけです。
サーバにコマンドでログインするとか手間は一切要らなくなります。
実際は、ファイル転送ソフトでサーバに接続するときに、ソフトがログインコマンドを送信しているはずですが、その辺は意識しなくても大丈夫ですからね。

【重要!!】このプログラムは、サーバがコマンドを許可していればなんでもできてしまいます。
例えばファイル削除(rm)などです。そのため全て自己責任でお願いします。
大事なファイルがサーバに上がっている場合は、試す前に必ずバックアップを取りましょう。

-PHPコード
-, , , ,