-
Notifications
You must be signed in to change notification settings - Fork 15
/
install.php
491 lines (438 loc) · 18.8 KB
/
install.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
<?php
// Shift-JISに
ini_set('default_charset', 'sjis-win');
// べースフォルダ
$base_dir = rtrim(str_replace('\\','/',dirname(__FILE__)), '/');
// バージョン
$version = file_get_contents(dirname(__FILE__).'/data/version.txt');
// Shift-JISのダメ文字対策
function sj_str($text) {
$str_arr = ['―\','ソ\','Ы\','Ⅸ\','噂\','浬\','欺\','圭\','構\','蚕\','十\','申\','曾\','箪\','貼\','能\','表\','暴\','予\',
'禄\','兔\','喀\','媾\','彌\','拿\','杤\','歃\','濬\','畚\','秉\','綵\','臀\','藹\','觸\','軆\','鐔\','饅\','鷭\', ""];
$text = str_replace("\\\\", "\\", $text);
for ($i = 0; $str_arr[$i] != ""; $i++) {
$text = str_replace($str_arr[$i] . "\\", mb_substr($str_arr[$i], 0, 1), $text); // 先に\がついていたら消して
$text = str_replace($str_arr[$i], $str_arr[$i] . "\\", $text); // \つける
}
return $text;
}
// ' // ←エディタの表示がおかしくなる現象への対策
// フォルダコピー関数
function dir_copy($dir_name, $new_dir){
if (!is_dir($dir_name)) {
copy(sj_str($dir_name), sj_str($new_dir));
return true;
}
if (!is_dir($new_dir)) {
mkdir($new_dir);
}
if (is_dir($dir_name)) {
if ($dh = opendir($dir_name)) {
while (($file = readdir($dh)) !== false) {
if ($file == "." || $file == "..") {
continue;
}
if (is_dir($dir_name . "/" . $file)) {
dir_copy($dir_name . "/" . $file, $new_dir . "/" . $file);
} else {
copy(sj_str($dir_name . "/" . $file), sj_str($new_dir . "/" . $file));
}
}
closedir($dh);
}
}
return true;
}
// フォルダがない場合にのみディレクトリを作成する
function if_mkdir($mkdir){
global $serverroot;
if (!file_exists($serverroot.$mkdir)){
mkdir($serverroot.$mkdir);
echo ' フォルダ '.$serverroot.$mkdir.' を作成しました。'."\n";
echo "\n";
}
}
// コピー
function if_copy($copy, $flg = false){
global $base_dir, $serverroot;
if (!file_exists($serverroot.$copy) or $flg == true){
dir_copy($base_dir.$copy, $serverroot.$copy);
echo ' '.$base_dir.$copy.' を'."\n";
echo ' '.$serverroot.$copy.' にコピーしました。'."\n";
echo "\n";
}
}
// 出力
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo ' TVRemotePlus '.$version.' インストーラー'."\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
echo ' TVRemotePlus のセットアップを行うインストーラーです。'."\n";
echo ' 途中でキャンセルする場合はそのままウインドウを閉じてください。'."\n";
echo ' アップデートの場合は Apache が起動していない事を確認してから行ってください。'."\n";
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
echo ' 1. TVRemotePlus をインストールするフォルダを指定します。'."\n";
echo "\n";
echo ' フォルダをドラッグ&ドロップするか、フォルダパスを入力してください。'."\n";
echo ' なお、Users・Program Files 以下と、日本語(全角)が含まれるパス、'."\n";
echo ' 半角スペースを含むパスは正常に動作しなくなる原因となるため、避けてください。'."\n";
echo "\n";
echo ' インストールするフォルダ:';
// TVRemotePlusをインストールするフォルダ
$serverroot = trim(fgets(STDIN));
$serverroot = str_replace('"', '', $serverroot);
echo "\n";
// 空だったら
if (empty($serverroot)){
while(empty($serverroot)){
echo ' 入力欄が空です。もう一度入力してください。'."\n";
echo "\n";
echo ' インストールするフォルダ:';
$serverroot = trim(fgets(STDIN));
$serverroot = str_replace('"', '', $serverroot);
echo "\n";
}
}
// 置換
$serverroot = str_replace('\\', '/', $serverroot);
$serverroot = rtrim($serverroot, '/');
// フォルダが存在する場合アップデート
if (file_exists($serverroot) and file_exists($serverroot.'/config.php')){
echo ' 既に指定されたフォルダにインストールされていると判定しました。'."\n";
echo ' アップデートモードでインストールします。'."\n";
echo ' このままアップデートモードでインストールするには 1 を、'."\n";
echo ' 全て新規インストールする場合は 2 を入力してください。'."\n";
echo "\n";
echo ' Enter キーで次に進む場合、自動でアップデートモードを選択します。'."\n";
echo "\n";
echo ' インストールモード:';
$update_flg = trim(fgets(STDIN));
// 判定
if ($update_flg == 2) $update = false;
else $update = true;
echo "\n";
} else {
$update = false;
}
// 新規インストールの場合はIPとポートを訊く
if ($update === false){
echo ' 2. TVRemotePlus をインストールする PC の、ローカル IP アドレスを入力してください。'."\n";
echo "\n";
echo ' ローカル IP アドレスは、通常 192.168.x.xx のような形式の家の中用の IP アドレスです。'."\n";
echo ' インストーラーで検知したローカル IP アドレスは '.getHostByName(getHostName()).' です。'."\n";
echo ' 判定が間違っている場合もあります (VPN 等を使っていて複数の仮想デバイスがある場合など)'."\n";
echo ' その場合、メインで利用しているローカル IP アドレスを ipconfig で調べ、入力してください。'."\n";
echo "\n";
echo ' よくわからない場合は、Enter キーを押し、次に進んでください。'."\n";
echo "\n";
echo ' ローカル IP アドレス:';
// TVRemotePlusを稼働させるPC(サーバー)のローカルLAN内IP
$serverip = trim(fgets(STDIN));
// 空だったら
if (empty($serverip)){
$serverip = getHostByName(getHostName());
}
echo "\n";
echo ' 3. 必要な場合、TVRemotePlus が利用するポートを設定してください。'."\n";
echo "\n";
echo ' 通常は、ブラウザの URL 欄から http://'.$serverip.':8000 でアクセスできます。'."\n";
echo ' この 8000 の番号を変えたい場合は、ポート番号を入力してください。'."\n";
echo ' HTTPS 接続時はポート番号が ここで設定した番号 + 100 になります。'."\n";
echo "\n";
echo ' よくわからない場合は、Enter キーを押し、次に進んでください。'."\n";
echo "\n";
echo ' 利用ポート番号:';
// TVRemotePlusを稼働させるポート
$http_port = trim(fgets(STDIN));
// 空だったら
if (empty($http_port)){
$http_port = 8000;
}
$https_port = $http_port + 100; // SSL用ポート
echo "\n";
echo ' 4. お使いの TVTest の BonDriver は 32bit ですか? 64bit ですか?'."\n";
echo "\n";
echo ' 32bit の場合は 1 、64bit の場合は 2 と入力してください。'."\n";
echo ' この設定で 32bit 版・64bit 版どちらの TSTask を使うかが決まります。'."\n";
echo ' インストール終了後、お使いの TVTest の BonDriver と ch2 ファイルを'."\n";
echo ' '.$serverroot.'/bin/TSTask/BonDriver/ にコピーしてください。'."\n";
echo "\n";
echo ' Enter キーで次に進む場合、自動で 32bit の TSTask を選択します。'."\n";
echo "\n";
echo ' TVTest の BonDriver:';
// TVTestのBonDriver
$bondriver = trim(fgets(STDIN));
// 判定
if ($bondriver != 2) $bondriver = 1;
echo "\n";
echo ' 5. EDCB Material WebUI (EMWUI) のある URL を入力してください。'."\n";
echo "\n";
echo ' 通常は http://(EDCBのあるPCのIPアドレス):5510/ になっています。'."\n";
echo ' 以前は http://(EDCBのあるPCのIPアドレス):5510/api/ でしたが、変更になりました。'."\n";
echo ' EDCB Material WebUI のポートやフォルダ構成を変更していたり、'."\n";
echo ' EDCB が別の PC に入っている場合は、適宜設定を変更してください。'."\n";
echo "\n";
echo ' Enter キーで次に進む場合、同じ PC に EDCB が導入されていると仮定し、'."\n";
echo ' 自動で http://'.$serverip.':5510/ に設定します。'."\n";
echo ' この設定は ≡ サイドメニュー → 設定 → 環境設定 からも変更できます。'."\n";
echo "\n";
echo ' EMWUI のある URL:';
// TVTestのBonDriver
$EDCB_http_url = trim(fgets(STDIN));
// 判定
if (empty($EDCB_http_url)){
$EDCB_http_url = 'http://'.$serverip.':5510/';
}
echo "\n";
echo ' 6. 録画ファイルのあるフォルダを指定します。'."\n";
echo "\n";
echo ' フォルダをドラッグ&ドロップするか、フォルダパスを入力してください。'."\n";
echo ' なお、特殊なパス (UNCパス等) の場合、正常に動作しない可能性があります。'."\n";
echo "\n";
echo ' この設定は ≡ サイドメニュー → 設定 → 環境設定 からも変更できます。'."\n";
echo "\n";
echo ' 録画ファイルのあるフォルダ:';
// 録画ファイルのあるフォルダ
$TSfile_dir = trim(fgets(STDIN));
$TSfile_dir = str_replace('"', '', $TSfile_dir);
echo "\n";
// 空だったら
if (empty($TSfile_dir)){
while(empty($TSfile_dir)){
echo ' 入力欄が空です。もう一度入力してください。'."\n";
echo "\n";
echo ' 録画ファイルのあるフォルダ:';
$TSfile_dir = trim(fgets(STDIN));
$TSfile_dir = str_replace('"', '', $TSfile_dir);
echo "\n";
}
}
// フォルダがなかったら
if (!file_exists($TSfile_dir)){
while(!file_exists($TSfile_dir)){
echo ' フォルダが存在しません。もう一度入力してください。'."\n";
echo "\n";
echo ' 録画ファイルのあるフォルダ:';
$TSfile_dir = trim(fgets(STDIN));
$TSfile_dir = str_replace('"', '', $TSfile_dir);
echo "\n";
}
}
// 置換
$TSfile_dir = str_replace('\\', '/', $TSfile_dir);
$TSfile_dir = rtrim($TSfile_dir, '/').'/';
}
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
echo ' インストールを開始します。'."\n";
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
echo ' TVRemotePlus をインストールしています…'."\n";
echo "\n";
sleep(1); // 1秒
// フォルダを作る
if_mkdir('/');
if_copy ('/config.default.php', true);
if_copy ('/createcert.bat', true);
if_copy ('/License.txt', true);
if_copy ('/Readme.md', true);
if_copy ('/Readme-Launcher.md', true);
if_copy ('/stream.bat', true);
if_copy ('/TVRemotePlus.exe', true);
if_copy ('/TVRemotePlus.exe.config', true);
if_copy ('/bin', true);
if_copy ('/data', true);
if_copy ('/docs', true);
if_copy ('/htdocs', true);
if_copy ('/logs', true);
if_copy ('/modules', true);
// 設定ファイル
$tvrp_conf_file = $serverroot.'/config.php';
$tvrp_default_file = $serverroot.'/config.default.php';
// 新規インストールのみの処理
if ($update === false){
// Apache の設定ファイル
$httpd_conf_file = $serverroot.'/bin/Apache/conf/httpd.conf';
$httpd_default_file = $serverroot.'/bin/Apache/conf/httpd.default.conf';
// PHP の設定ファイル
$php_ini_file = $serverroot.'/bin/PHP/php.ini';
$php_default_file = $serverroot.'/bin/PHP/php.default.ini';
// config.default.php を config.php にコピー
copy($tvrp_default_file, $tvrp_conf_file);
// httpd.default.conf を httpd.conf にコピー
copy($httpd_default_file, $httpd_conf_file);
// php.default.ini を php.ini にコピー
copy($php_default_file, $php_ini_file);
// TSTask のコピー
if ($bondriver == 2){
copy($serverroot.'/bin/TSTask/64bit/BonDriver_TSTask.dll', $serverroot.'/bin/TSTask/BonDriver_TSTask.dll');
copy($serverroot.'/bin/TSTask/64bit/TSTask.exe', $serverroot.'/bin/TSTask/TSTask-tvrp.exe');
copy($serverroot.'/bin/TSTask/64bit/TSTaskCentre.exe', $serverroot.'/bin/TSTask/TSTaskCentre-tvrp.exe');
} else {
copy($serverroot.'/bin/TSTask/32bit/BonDriver_TSTask.dll', $serverroot.'/bin/TSTask/BonDriver_TSTask.dll');
copy($serverroot.'/bin/TSTask/32bit/TSTask.exe', $serverroot.'/bin/TSTask/TSTask-tvrp.exe');
copy($serverroot.'/bin/TSTask/32bit/TSTaskCentre.exe', $serverroot.'/bin/TSTask/TSTaskCentre-tvrp.exe');
}
// 状態設定ファイルを初期化
$jsonfile = $serverroot.'/data/settings.json';
$json['1']['state'] = 'Offline';
$json['1']['channel'] = '0';
if (!file_exists($jsonfile)) file_put_contents($jsonfile, json_encode($json, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT));
// TVRemotePlus の設定ファイル
$tvrp_conf = file_get_contents($tvrp_conf_file);
// 置換
$tvrp_conf = preg_replace('/^\$EDCB_http_url =.*/m', '$EDCB_http_url = \''.mb_convert_encoding($EDCB_http_url, 'UTF-8', 'SJIS, SJIS-WIN').'\';', $tvrp_conf);
$tvrp_conf = preg_replace('/^\$TSfile_dir =.*/m', '$TSfile_dir = \''.mb_convert_encoding($TSfile_dir, 'UTF-8', 'SJIS, SJIS-WIN').'\';', $tvrp_conf);
// 書き込み
file_put_contents($tvrp_conf_file, $tvrp_conf);
// Apache の設定ファイル
$httpd_conf = file_get_contents($httpd_conf_file);
// 置換
$httpd_conf = preg_replace("/Define SRVROOT.*/", 'Define SRVROOT "'.$serverroot.'"', $httpd_conf);
$httpd_conf = preg_replace("/Define SRVIP.*/", 'Define SRVIP "'.$serverip.'"', $httpd_conf);
$httpd_conf = preg_replace("/Define HTTP_PORT.*/", 'Define HTTP_PORT "'.$http_port.'"', $httpd_conf);
$httpd_conf = preg_replace("/Define HTTPS_PORT.*/", 'Define HTTPS_PORT "'.$https_port.'"', $httpd_conf);
// 書き込み
file_put_contents($httpd_conf_file, $httpd_conf);
// PHP の設定ファイル
$php_ini = file_get_contents($php_ini_file);
// 置換
$php_ini = preg_replace('/^extension_dir =.*/m', 'extension_dir = "'.mb_convert_encoding($serverroot.'/bin/PHP/ext/', 'UTF-8', 'SJIS, SJIS-WIN').'"', $php_ini);
// 書き込み
file_put_contents($php_ini_file, $php_ini);
// HTTPS 接続用オレオレ証明書の作成
echo ' HTTPS 接続用の自己署名証明書を作成します。'."\n";
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
$cmd = 'pushd "'.str_replace('/', '\\', $serverroot).'\bin\Apache\bin\" && '.
'.\openssl.exe req -new -newkey rsa:2048 -nodes -config ..\conf\openssl.cnf -keyout ..\conf\server.key -out ..\conf\server.crt'.
' -x509 -days 3650 -sha256 -subj "/C=JP/ST=Tokyo/O=TVRemotePlus/CN='.$serverip.'" -addext "subjectAltName = IP:127.0.0.1,IP:'.$serverip.'"';
exec($cmd, $opt1, $return1);
copy($serverroot.'/bin/Apache/conf/server.crt', $serverroot.'/htdocs/files/TVRemotePlus.crt');
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
if ($return1 == 0){
echo ' 自己署名証明書を正常に作成しました。'."\n";
} else {
echo ' 自己署名証明書の作成に失敗しました…'."\n\n";
echo ' 自己署名証明書が正常に作成されていない場合、Apache の起動に失敗します。'."\n";
echo ' インストール先にコピーされている createcert.bat を実行して自己署名証明書を作成するか、'."\n";
echo ' 再インストールし、'.$serverroot.'/bin/Apache/conf/ に server.crt と server.key'."\n";
echo ' が作成されていることを確認してから TVRemotePlus を起動してください。'."\n";
}
// ショートカット作成
// 既にショートカットがある場合は上書きしないようショートカット名を変える
if (file_exists(getenv('USERPROFILE').'\Desktop\TVRemotePlus- Launcher.lnk')){
$shortcut_file = '\Desktop\TVRemotePlus- Launcher (1).lnk';
$shortcut_count = 1;
while (file_exists(getenv('USERPROFILE').$shortcut_file)){
if (file_exists(getenv('USERPROFILE').$shortcut_file)){
$shortcut_count++;
$shortcut_file = '\Desktop\TVRemotePlus- Launcher ('.$shortcut_count.').lnk';
}
}
} else {
$shortcut_file = '\Desktop\TVRemotePlus- Launcher.lnk';
}
$powershell = '$shell = New-Object -ComObject WScript.Shell; '.
'$lnk = $shell.CreateShortcut(\"$Home'.$shortcut_file.'\"); '.
'$lnk.TargetPath = \"'.str_replace('/', '\\', $serverroot).'\TVRemotePlus.exe\"; '.
'$lnk.WorkingDirectory = \"'.str_replace('/', '\\', $serverroot).'\"; '.
'$lnk.Save()';
exec('powershell -Command "'.$powershell.'"', $opt2, $return2);
echo "\n";
if ($return2 == 0) echo ' ショートカットを作成しました。'."\n";
else echo ' ショートカットの作成に失敗しました…'."\n";
echo "\n";
// アップデート処理
} else {
// 古い設定ファイルを読み込む
require_once ($tvrp_conf_file);
// config.default.php を config.php にコピー
copy($tvrp_default_file, $tvrp_conf_file);
// 設定を配列に格納
@$config['quality_default'] = $quality_default;
@$config['encoder_default'] = $encoder_default;
@$config['BonDriver_default_T'] = $BonDriver_default_T;
@$config['BonDriver_default_S'] = $BonDriver_default_S;
@$config['stream_current_live'] = $stream_current_live;
@$config['stream_current_file'] = $stream_current_file;
@$config['subtitle_default'] = $subtitle_default;
@$config['subtitle_file_default'] = $subtitle_file_default;
@$config['TSfile_dir'] = $TSfile_dir;
@$config['TSinfo_dir'] = $TSinfo_dir;
@$config['EDCB_http_url'] = $EDCB_http_url;
@$config['reverse_proxy_url'] = $reverse_proxy_url;
@$config['setting_hide'] = $setting_hide;
@$config['silent'] = $silent;
@$config['history_keep'] = $history_keep;
@$config['update_confirm'] = $update_confirm;
@$config['nicologin_mail'] = $nicologin_mail;
@$config['nicologin_password'] = $nicologin_password;
@$config['tweet_time'] = $tweet_time;
@$config['tweet_upload'] = $tweet_upload;
@$config['tweet_delete'] = $tweet_delete;
@$config['CONSUMER_KEY'] = $CONSUMER_KEY;
@$config['CONSUMER_SECRET'] = $CONSUMER_SECRET;
@$config['basicauth'] = $basicauth;
@$config['basicauth_user'] = $basicauth_user;
@$config['basicauth_password'] = $basicauth_password;
@$config['setting_redirect'] = $setting_redirect;
@$config['encoder_log'] = $encoder_log;
@$config['encoder_window'] = $encoder_window;
@$config['TSTask_shutdown'] = $TSTask_shutdown;
@$config['udp_port'] = $udp_port;
@$config['hlslive_time'] = $hlslive_time;
@$config['hlsfile_time'] = $hlsfile_time;
@$config['hlslive_list'] = $hlslive_list;
// 新しくコピーした設定ファイルに以前の設定をインポートする
$tvrp_conf = file_get_contents($tvrp_conf_file);
foreach ($config as $key => $value) {
// 空でなければ
if (!empty($value)){
// シングルクォーテーションを取る(セキュリティ対策)
$value = str_replace('\'', '', $value);
// 数値化できるものは数値に変換しておく
if (is_numeric($value) and mb_substr($value, 0, 1) != '0'){
$set = intval($value);
} else {
$set = '\''.strval($value).'\'';
}
// バックスラッシュ(\)を見つけたらスラッシュに変換
if (strpos($set, '\\') !== false){
$set = str_replace('\\', '/', $set);
}
// config.php を書き換え
$tvrp_conf = preg_replace("/^\\$$key =.*;/m", '$'.$key.' = '.$set.';', $tvrp_conf); // 置換
}
}
file_put_contents($tvrp_conf_file, $tvrp_conf); // 書き込み
}
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
echo ' インストールを完了しました。'."\n";
echo "\n";
sleep(1); // 1秒
// 新規インストールのみの処理
if ($update === false){
echo ' セットアップはまだ終わっていません。'."\n\n";
echo ' BonDriver と TVTest のチャンネル設定ファイル (.ch2) は '."\n";
echo ' '.$serverroot .'/bin/TSTask/BonDriver/ に忘れずに入れてください。'."\n\n";
echo ' 終わったら、デスクトップのショートカットから TVRemotePlus を起動し、'."\n";
echo ' ブラウザから http://'.$serverip.':'.$http_port.'/ へアクセスします。'."\n";
echo ' その後、≡ サイドメニュー → 設定 → 環境設定 から必要な箇所を設定してください。'."\n\n";
echo ' PWA 機能を使用する場合は、設定ページからダウンロードできる自己署名証明書を'."\n";
echo ' あらかじめ端末にインストールした上で、 https://'.$serverip.':'.$https_port.'/ にアクセスしてください。'."\n";
echo "\n";
}
echo ' 終了するには何かキーを押してください。'."\n";
echo "\n";
echo ' -------------------------------------------------------------------'."\n";
echo "\n";
trim(fgets(STDIN));