<?php
// dl.php         Ver.20170505-0145     煮込みテレビ 2017    http://nnt.0am.jp/ nmtvweb@gmail.com
// 参考: 	http://www.spencernetwork.org/memo/tips-5.php
// 使用例:	dl.php?file=[file]&dl=[0|1|2]
// 	[file]	 開くファイルを指定。		例: file.htm
// 	[dl] 	 0ならば装飾して表示、1ならばダウンロード、2ならば装飾せずに表示。未指定ならば0。

ini_set('display_errors',0);ini_set('log_errors','On'); // エラーを画面に表示しないけどログには記録する

// エラー表示時はプレーンテキストで表示。閲覧モード時
header("Content-Type: text/plain; charset=UTF-8");

// ファイル名を取得。取得できない場合はエラーを吐いて終了。
if (!$_GET['file']) {header("HTTP/1.1 400 Bad Request");die("400 Bad Request\nダウンロードするファイルを指定してください\nExample dl.php?file=text.txt");}else{
$path_file = htmlspecialchars($_GET['file']);}

// webrootより上の階層はDLさせない 相対パス・ドライブ指定をブロック
if (strpos($path_file,'..') !==false||strpos($path_file,':') !==false){header("HTTP/1.1 403 Forbidden");die("403 Forbidden\nアクセスが拒否されました");}

// ファイルが存在しないならば404を返す
if (!file_exists($path_file)) {header("HTTP/1.1 404 Not Found");die("404 Not Found\nファイルが見つかりません 又は フォルダはダウンロードできません");}

// ★★ ファイルをダウンロードするか表示するかの判定
if ($_GET['dl']=="2"){}else if (!$_GET['dl']==false){// ★★ ファイルをダウンロードする場合

// ダウンロードさせるためのHeaderを送信
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=\"".basename($path_file)."\"");
header('Content-Length: '.filesize($path_file));
header("Content-Type: application/octet-stream");

// ファイルをダウンロード
if (!readfile($path_file)){header("Content-Type: text/plain; charset=UTF-8");die("ファイルを開けません");}else{die;}
}

// ★★ ファイルを閲覧する場合
// 閲覧時はHTML表示するようHeaderを上書き
header("Content-Type: text/html; charset=UTF-8");
header("Pragma: no-cache");
header("Cache-Control: no-cache");
// /★★
?>
<!doctype html><html lang="ja"><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<!-- base-hs.htm      Ver.20170610-2316         (C)2017 NMTV              http://nnt.0am.jp/ nmtvweb@gmail.com ◆◇  -->
<link rel="stylesheet" href="/base.css"><link rel="stylesheet" href="/button.css"><link rel="icon" href="/favicon.ico">
<script src="/base.js" charset="UTF-8"></script><meta name="msapplication-TileImage" content="/apple-touch-icon.png">
<link rel="apple-touch-icon" href="/apple-touch-icon.png"><meta name="msapplication-TileColor" content="#a06a00">
<link rel="mask-icon" sizes="any" href="/site/icon-mono.svg" color="#805500"><meta name="theme-color" content="#402810">
<meta name="keywords" content="NMTV,煮込みテレビ,NMTVWeb,NMWeb,nicomitv,nicomi_tv,自宅サーバー,自鯖,ホームページ,HTML5">
<!-- /header -->
<title><?php echo basename($path_file); ?> - NMTV Web</title>
<style><!--
*{box-sizing:border-box;}
html,body,.body{height:100%;width:100%;}
.content{font-family:monospace,'MS ゴシック', 'MS Gothic';display:block;margin:0.75em 0.5em;white-space:pre-wrap;word-wrap:break-word;box-sizing:border-box;}
--></style>
<div class="body" id="body">
<!-- dl.php Ver.20170505-0145         dl.php?file=[file]&dl=[0|1|2] -->
<?php if(!$_GET['dl']=="2"){echo '<script src="/pageheader.js" charset="UTF-8"></script>';} ?>

<script><!--

document.getElementById("AddItemR1").innerHTML="ダウンロード";
document.getElementById("AddItemR1").onclick=new Function("dlphpfile()");
document.getElementById("AddItemR1").style.cursor="pointer";
document.getElementById("AddItemR1").style.display="block";

function dlphpfile(){
var FileGetParam=decodeURIComponent(location.search.match(/file=(.*?)(&|$)/)[1]);
var FileGetLink=location.protocol+"//"+location.hostname;if(location.port){FileGetLink+=":"+location.port;}
FileGetLink+=location.pathname+"?file="+FileGetParam+"&dl=1";window.location=FileGetLink;
}

--></script>

<pre class="content">
<?php echo htmlentities(file_get_contents($path_file),ENT_QUOTES); ?>
</pre>

<?php if(!$_GET['dl']=="2"){echo '<footer><div class="footer" id="footer"><hr><div id="footer-text"><a href="/">サイトトップ</a> | <a href="/help/">このサイトについて</a> | <a href="/contact/">お問い合わせ</a> | <a href="#">ページトップ</a></div><div id="Copyright">&copy;2017 NMTV</div></div></footer>';}else{echo '<div id="Copyright"></div>';} ?>
</div></html>