Takže k návodu:
stačí nainstalovat tyto balíčky:
opkg install apache php5 php5-cgi php-cli php5-mod-gd php5-mod-mysql zoneinfo-europe
a pro správnou podporu časových zón je ještě nutné nainstalovat zoneinfo-core zoneinfo-europe.
v /etc/apache/httpd.conf si zkontrolovat číslo portu (a jednoduše máme i IPv6 web server)
Listen 80
Umístění html a php souboru jsem nechal výchozí aby se při každém načtení stránky nemusel startovat HDD.
DocumentRoot "/usr/share/htdocs"
Jen složku media mám pomocí symlinku umístěnou na HDD, sem se ukládají nahrané pořady. Vytvoření symlinku jsem provedl takto:
ln -s /mnt/hdd/movie/data data
v sekci nastavení parametrů výchozího umístění, je nutné povolit symbolické odkazy:
<Directory />
Options FollowSymLinks
a dále dodat pravidla pro složku s nahrávkami (tedy /usr/share/htdocs/movie/data), čímž zamezíme přístupu odjinud než z definovaných adres. V našem případě se jedná o vnitřní rozsah IP adres.:
<Directory />
Options FollowSymLinks
<Directory "/usr/share/htdocs/movie/data">
Order deny,allow
Deny from all
Allow from 192.168.1.0/255.255.0.0
Allow from XXXX:::29b::/64
Allow from XXXX:::829b::/64
</Directory>
No a potom už se jedná o obvyklé nastavení apache pro podporu PHP (přidání souboru index.php):
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
Do sekce alias_module je nutné přidat toto:
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/usr/share/cgi-bin/"
ScriptAlias /php/ "/usr/bin/"
</IfModule>
a do mime_module
<IfModule mime_module>
AddType application/x-httpd-php .php
</IfModule>
a na konec souboru toto:
Action application/x-httpd-php "/php/php-cgi"
No a nyní ke zdrojovým kódům, na úvodní stránce mám zatím jen zobrazení venkovní teploty a automatické obnovování pomocí javascriptu. V podstatě se periodicky načítá soubor teplota.txt, ve kterém je umístěn řetězec s teplotou. Aby se neošoupala paměť routeru tak je soubor opět symlinkován do /tmp.
<!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Teploměr</title>
<style type="text/css">BODY{background:#87ceeb}</style>
<script type="text/JavaScript">
function LoadTeplota()
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var Teplota=xmlhttp.responseText;
//document.getElementById("Teplota").innerHTML
= Teplota + "<br>\n";
document.getElementById("Teplota").innerHTML = Teplota.replace(".",",") + "
°C";
}
}
xmlhttp.open("GET","teplota.txt",true);
xmlhttp.send();
}
//
tato funkce nastaví periodické spouštění funkce LoadTeplota každých 20 vteřin
setInterval(function(){LoadTeplota()},20000);
</script>
</head>
<body onload="LoadTeplota()"> <!-- toto způsobí okamžité první načtení teploty
-->
<span Id="Teplota"></span>
</body>
</html>
Soubor pro vkládání teploty se jmenuje ZapisTeplotu.php, kterým jiný router pomocí wgetu či curl vkládá teplotu, ta se jednoduše zapíše dou souboru teplota.txt.
<?php
if (isset($_REQUEST["Venku"]) && $_SERVER["REMOTE_ADDR"] == "192.168.1.2")
{
$soubor = fopen("/tmp/teplota.txt", "w");
fwrite($soubor,htmlspecialchars($_REQUEST["Venku"]));
fclose($soubor);
echo htmlspecialchars($_REQUEST["Venku"]);
}
?>
Ikonky CSFD.png, Download.ico a Stream.ico. A dále php soubory a symlinkované umístění video souborů nahrávaných v TS(MPEG transport stream):
Soubor GetStream.php v podstatě podstrčí vygenerovaný playlist pro VLC, viz následující kód. Vím, že takto není URL příliš bezpečné předávat ale domácí uživatelé si jistě stream server ničit nebudou:
<?php
if (isset($_GET["URL"]))
{
header('Content-Description:
File Transfer');
header('Content-Type:
application/octet-stream');
header('Content-Disposition:
attachment; filename='."PlayList.m3u");//basename($file));
header('Content-Transfer-Encoding:
binary');
header('Expires: 0');
header('Cache-Control:
must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
//header('Content-Length:
' . filesize($file));
echo "#EXTM3U\n#EXTVLCOPT--http-reconnect=true\n#EXTVLCOPT:\n";
echo "http://$_SERVER[HTTP_HOST]/movie/data/".rawurlencode(htmlspecialchars($_GET["URL"]));
}
?>
Poslední je soubor, který generuje tabulku se seznamem nahrávek. Každá nahrávka má odkaz na hledání v CSFD, možnost stažení a streamování. Celé to ještě není dokonalé ale třeba to někomu pomůže k dalším úpravám a modifikacím. Do budoucna by bylo vhodné předělat na ajax a rozhraní rozšířit o čtení a zobrazování EPG, který přijímač na HDD také ukládá.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.01//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>TS přehrávač</title>
<style type="text/css">BODY{background:#87ceeb}</style>
</head>
<body>
<table border="1">
<?php
function nahradiZnaky( $string )
{
$string = htmlspecialchars($string);
$string = str_replace ( 'á','%E1', $string );
$string = str_replace('é', '%E9', $string );
$string = str_replace('í', '%ED', $string );
$string = str_replace('ó', '%F3', $string );
$string = str_replace('ú', '%FA', $string );
$string = str_replace('ý', '%FD', $string );
$string = str_replace('Š', '%8A', $string );
$string = str_replace('Ž', '%8E', $string );
$string = str_replace('š', '%9A', $string );
$string = str_replace('ž', '%9E', $string );
$string = str_replace('Á', '%C1', $string );
$string = str_replace('É', '%C9', $string );
$string = str_replace('Í', '%CD', $string );
$string = str_replace('Ó', '%D3', $string );
$string = str_replace('Ú', '%DA', $string );
$string = str_replace('Ý', '%CD', $string );
$string = str_replace('ě', '%E9', $string );
$string = str_replace('É', '%C9', $string );
$string = str_replace('É', '%C9', $string );
$string = str_replace('É', '%C9', $string );
return $string;
}
define('CHARSET', 'cp1252');
define('REPLACE_FLAGS', ENT_COMPAT | ENT_XHTML);
$dir = "data";
if (is_dir($dir))
{
if ($dh = opendir($dir))
{
$poradi = 0;
while (($file = readdir($dh)) !== false)
{
if (($file != ".") && ($file != "..") && (substr($file, strlen($file) - 3) == '.ts'))
{
//20140223 1956 - CT 1
- Piknik.ts
$datum=substr($file, 0, 13);
$url=htmlspecialchars($file);
$file=substr($file, 15);
$rok = substr($datum, 0, 4);
$mesic = substr($datum, 4, 2);
$den = substr($datum, 6, 2);
$hodina = substr($datum, 9, 2);
$minuta = substr($datum, 11, 2);
//echo
$file."\n";
$zacatek = strpos($file, "-") + 2;
$kanal = substr($file, 0, $zacatek - 3);
$CSFDurl = substr($file, $zacatek, strrpos($file, ".ts") - $zacatek);
$nazevFilmu = substr($file, $zacatek, (strrpos($file, ".ts") - $zacatek));
echo "<TR><TD>
".$den.".".$mesic.".".$rok." ".$hodina.":".$minuta."
</TD><TD> ".$kanal.
" </TD><TD> <a
href=\"http://www.csfd.cz/hledat/?q=$CSFDurl\"
target=\"_blank\"> $nazevFilmu </a>
<!--</TD><TD><img src=\"nahledy\\$url.jpg\">--!>
</TD><TD><a href=\"data\\".
$url."\"><img
src=\"Download.ico\"></a></TD><TD>
<a href=\""."GetStream.php?URL=".$url."\"><img
src=\"Stream.ico\"></a></p>
</TD><TD><a href=\"http://www.csfd.cz/hledat/?q=$CSFDurl\"
target=\"_blank\"><img src=\"CSFD.png\"></a></TD></TR>\n";
}
}
closedir($dh);
}
}
?>
</table>
</body>
</html>
Díky za tipy.
OdpovědětVymazatVytvořil jsem návod jak si zprovoznit apache a přistupovat skrz něj k souborům na NASu připojenému k Turrisu.
https://www.turris.cz/forum/topic_show.pl?tid=454