サイト移転などで、ファイル一式ダウンロードしなければならない場面は結構あります。その時、SSHが使えると話が早いのですが、移転する場合は貧弱なサーバーからの移転が殆どですのでSSHは使えません。
そうなると、真面目にFTPでダウンロードするしかなくなり、実際やってみるとダウンロードに失敗したり、証明書がー、というダイアログが出たりして、途方に暮れるわけです。
この記事は、SSHが使えないサーバーで、サーバーのファイルをTARでまとめる方法についてご紹介します。
サーバーのファイル一式をzipで固める方法
phpでzipで固めるという記事を以前見かけました。実際、実行してみると正常終了しているようでしたが、zipファイルは出力されていませんでした。
出来るサイトは出来るけど、出来ないサイトは出来ない。phpのライブラリが対応していないのか、execコマンドがダメなのかわかりません。
貧弱なサーバーではそもそもサーバーの設定を変更できませんので、速攻で諦めて次に進みます。
ターミナルを疑似的に再現する
zipを直接作るやり方だと、上手くいかないとそれまで。
なので、ターミナルを再現する方法を調べました。
<?php
$command = "";
$commandResult = "";
if (isset($_POST['command']) && $_POST['command'] != "") {
$command = $_POST['command'];
$result = shell_exec($command);
if ($result != null) {
$commandResult = $result;
} else {
$commandResult = "実行結果はありません。。。";
}
$commandResult = "<div class='box'><pre>{$commandResult}</pre></div>";
}
$html = <<< EOM
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>オンラインたーみなる</title>
<style type="text/css">
<!--
#header {
position:relative;
margin:0 10px;
padding:10px 10px 10px 30px;
font:bold 22px/1.2 Arial, Helvetica, sans-serif;
color:#666;
text-align: center;
background:#ccc;
border-top:#ccc solid 1px;
border-right:#999 solid 1px;
border-bottom:#999 solid 1px;
border-left:#ccc solid 1px;
text-shadow:1px 1px 0 rgba(255,255,255,1);
box-shadow:
0 0 0 1px rgba(255,255,255,0.5) inset;
background-image: -webkit-gradient(linear, left top, left bottom,
from( rgba(220, 220, 220, 1.0)),
color-stop(0.25, rgba(240, 240, 240, 1.0)),
color-stop(0.30, rgba(235, 235, 235, 1.0)),
color-stop(0.36, rgba(240, 240, 240, 1.0)),
color-stop(0.50, rgba(235, 235, 235, 1.0)),
color-stop(0.80, rgba(215, 215, 215, 1.0)),
to( rgba(210, 210, 210, 1.0))
);
background-image: -webkit-linear-gradient(top,
rgba(220, 220, 220, 1.0),
rgba(240, 240, 240, 1.0) 25%,
rgba(235, 235, 235, 1.0) 30%,
rgba(240, 240, 240, 1.0) 36%,
rgba(235, 235, 235, 1.0) 50%,
rgba(215, 215, 215, 1.0) 80%,
rgba(210, 210, 210, 1.0)
);
background-image: -moz-linear-gradient(top,
rgba(220, 220, 220, 1.0),
rgba(240, 240, 240, 1.0) 25%,
rgba(235, 235, 235, 1.0) 30%,
rgba(240, 240, 240, 1.0) 36%,
rgba(235, 235, 235, 1.0) 50%,
rgba(215, 215, 215, 1.0) 80%,
rgba(210, 210, 210, 1.0)
);
background-image: -o-linear-gradient(top,
rgba(220, 220, 220, 1.0),
rgba(240, 240, 240, 1.0) 25%,
rgba(235, 235, 235, 1.0) 30%,
rgba(240, 240, 240, 1.0) 36%,
rgba(235, 235, 235, 1.0) 50%,
rgba(215, 215, 215, 1.0) 80%,
rgba(210, 210, 210, 1.0)
);
background-image: linear-gradient(to bottom,
rgba(220, 220, 220, 1.0),
rgba(240, 240, 240, 1.0) 25%,
rgba(235, 235, 235, 1.0) 30%,
rgba(240, 240, 240, 1.0) 36%,
rgba(235, 235, 235, 1.0) 50%,
rgba(215, 215, 215, 1.0) 80%,
rgba(210, 210, 210, 1.0)
);
}
#header:before {
content:" ";
position:absolute;
top:0;
left:15px;
width:0;
height:100%;
border-left:#ccc solid 1px;
}
#header:after {
content:" ";
position:absolute;
top:0;
left:16px;
width:0;
height:100%;
border-right:#eee solid 1px;
}
.cmd_input {
position: relative;
width: 90%;
margin: 40px 3%;
}
.cmd_input input[type='text'] {
font: 15px/24px sans-serif;
box-sizing: border-box;
width: 100%;
letter-spacing: 1px;
padding-left: 1em;
color: #ffffff;
background-color: #000000;
}
.cmd_input input[type='text']:focus {
outline: none;
}
.effect {
padding: 7px 14px;
transition: 0.4s;
border: 1px solid #000000;
background: transparent;
color: #ffffff;
background-color: #000000;
}
.effect ~ .focus_line:before,
.effect ~ .focus_line:after {
position: absolute;
top: -1px;
left: 50%;
width: 0;
height: 2px;
content: '';
transition: 0.4s;
background-color: #00ff00;
}
.effect ~ .focus_line:after {
top: auto;
bottom: 0;
}
.effect ~ .focus_line i:before,
.effect ~ .focus_line i:after {
position: absolute;
top: 50%;
left: 0;
width: 2px;
height: 0;
content: '';
transition: 0.6s;
background-color: #00ff00;
}
.effect ~ .focus_line i:after {
right: 0;
left: auto;
}
.effect:focus ~ .focus_line:before,
.effect:focus ~ .focus_line:after,
.cmd_input.ef ~ .focus_line:before,
.cmd_input.ef ~ .focus_line:after {
left: 0;
width: 100%;
transition: 0.4s;
}
.effect:focus ~ .focus_line i:before,
.effect:focus ~ .focus_line i:after,
.cmd_input.ef ~ .focus_line i:before,
.cmd_input.ef ~ .focus_line i:after {
top: -1px;
height: 100%;
transition: 0.6s;
}
.effect ~ label {
position: absolute;
z-index: -1;
top: 10px;
left:30px;
width: 100%;
transition: 0.3s;
letter-spacing: 0.5px;
color: #00ff00;
}
.effect:focus ~ label,
.cmd_input.ef ~ label {
font-size: 18px;
top: -20px;
left: 0;
transition: 0.3s;
color: #000000;
}
button.button {
font-size: 1.0em;
font-weight: bold;
padding: 5px 15px;
background-color: #c0c0c0;
color: #191970;
border: 2px solid #000000;
}
button.button:hover {
background-color: #000000;
color: #00ff00;
}
.box {
padding: 8px 19px;
margin: 2em 0;
color: #2c2c2f;
background: #cde4ff;
border-top: solid 5px #00ff00;
border-bottom: solid 5px #00ff00;
background-color: #000000;
}
.box pre {
margin: 0;
padding: 0;
color: #ffffff;
}
footer {
font-size: 80%;
width: 99%;
text-align: center;
padding-top: 10px;
padding-bottom: 10px;
background-color: #313131;
position: absolute;
bottom: 0;
}
footer address {
color: #ffffff;
letter-spacing: 5px;
font-style: normal;
}
-->
</style>
</head>
<body>
<header>
<h1 id="header">オンラインたーみなる</h1>
</header>
<form action="webconsole.php" method="post">
<div class="cmd_input">
<input class="effect" type="text" id="command" name="command" value="{$command}" placeholder="">
<label>コマンドを入力してください。</label>
<span class="focus_line"><i></i></span>
</div>
<center><button class="button" type="submit" value="実行">実行</button></center>
</form>
{$commandResult}
<footer>
<address>Copyright(C) Dsuke,Allright Reserved.</address>
</footer>
</body>
</html>
EOM;
echo $html;
ファイル名は、webconsole.phpじゃないと動かないです。
こちらは上手くいきました。
tar cvf Archive.tar ./*
このコマンドを実行すると、しばらく待たされたあとに、
実行結果はありません、的なメッセージがでますが、ファイルが出来ていますので、FTPでダウンロードします。
zipコマンドはサーバーの負荷が高くなるのでタイムアウトになるケースが多いですが、TARの場合は固めるだけなのでサーバーに蹴られるケースはほぼありません。
Lolipopでは、PHP5だと動きませんでした。PHP7.1以降にすると動きました。
WP Filemanagerを使う
WordPressのファイルマネージャーのプラグインには、tar圧縮する機能があります。
その機能を使うと、tarに簡単に圧縮することができますが、ファイル数が多いとタイムアウトしてしまうなど、サーバーに依存しているので使えるかどうかはケースバイケースです。
FILE MANAGERの無料バージョンプラグインの主な機能
Key Features in the Free File Manager plugin include:
* Operations: Various operations with files and folders on a remote server (copy, move, upload, create folder/file, rename, edit, delete, etc.)
* Move/Copy: Admin can Move/Copy files with Drag & Drop. Also includes multi file selection.
* Archives: Admin can create, archive and extract files(zip, rar, tar, gzip).
* File Size: Admin/User can upload any size files.
* File Type: Control what files can be uploaded and what file can be downloaded.
* Code Editor: File Manager comes with a built in integrated development environment (IDE) – New Feature
* Syntax Checker: File Manager now can complete code reviews before saving files to ensure your site will not go down when updating code. Reviewing code for errors has never been so easy! – New Feature
* Multiple Themes: Multiple File Manager Themes Available – New Feature
* Get Info: All file details, properties, information is now available by simply right clicking a file and selecting Get Info – New Feature
* Share Files by Email: With File Manager you can easily and quickly share files by Email. Simply right click a file and press share, that’s it! – New Feature
* Private Folder: Available only for File Manager Pro Edition
* Shortcode: Available only for File Manager Pro Edition
* Root Directory: Quickly and easily edit your root path directory. With this feature you can access files inside and outside of WordPress
* PDF Support: Preview PDF files easily
* Built-in Trash: Delete files by moving them to trash
* File View: Icon and list view both available for easy navigation
* Preview Support: Easily preview common file types including media (video, audio, mp3, thumbnails, etc)
* Search: Search functionality is built directly into File Manager making it simple to find your files.
* Shortcut Support: Common shortcuts are available in File Manager
* Automatic File Resize: automatically resize files once uploaded.
* Responsive UI: File Manager works on tablet and mobile devices
* Browsing History: File and folders browsing history
* Trash function: Move to Trash Folder Feature
* PDF Preview: PDF Preview feature available
* FTP/SFTP Support: Alternative to FTP or Cpanel
* File Preview: preview for common MIMEs and file types
* Directory Size: Calculate directory size
* Icon View: List and Icons view available for files and files
* Keyboard shortcuts: Keyboard shortcuts available e.g. copy,paste,drag & drop
* Drag and drop: File Drag & Drop file upload function available
* Functions Toolbar: Rich context menu and file manager functions toolbar
* Thumbnails: Thumbnails for all types of image files
* Upload to Media Library: We have now included the ability to enable images, pdf’s, and zip files to be uploaded to you folders and as well be available via the native WordPress Media Library
* Backup/Restore: Backup and restore themes files, plugins files,uploads folder and db data on server.
* Multi Languages Added
まとめ
サーバーを移転する時にFTPで簡単にダウンロードできるような強力なサーバーから移転するケースは少なく、貧弱なサーバーでいかに効率よくダウンロードするかというのが最初の壁として立ちはだかります。
そんな時には、この記事を思い出して欲しい。