php скрипт (Отобразить)
<?php
/* Config.*/
$basedir="/usr/data"; /* File system path. */
$baseurl="/DataStore"; /* URL path. */
/* Settings for Play. */
$view_mode="2"; /* 0 = 16x9 FULL, 1 = 14x9 ZOOM, 2 = ORIGINAL / 4x3 KINOZOOM,
* 3 = 16x9 ZOOM, 4 = 4x3
*/
//$audiotrack_num="1"; /* Default audio track num */
$total_buf_size="20"; /* megabytes; SetTotalBufferSize */
$initial_buf_size="8"; /* megabytes; SetInitialBuffer, SetPendingBuffer */
/* File types. */
$filetypes = array (
'm3u' => 'playlist',
'xml' => 'playlist',
'flv' => 'stream',
'f4v' => 'stream',
'3g2' => 'stream',
'3gp' => 'stream',
'3gp2' => 'stream',
'3gpp' => 'stream',
'asf' => 'stream',
'asx' => 'stream',
'avi' => 'stream',
'dat' => 'stream',
'iso' => 'stream',
'm2t' => 'stream',
'm2ts' => 'stream',
'm2v' => 'stream',
'm4v' => 'stream',
'mp3' => 'stream',
'mp2v' => 'stream',
'mp4' => 'stream',
'mp4v' => 'stream',
'mpe' => 'stream',
'mpeg' => 'stream',
'mpg' => 'stream',
'mov' => 'stream',
'mkv' => 'stream',
'mts' => 'stream',
'swf' => 'stream',
'vob' => 'stream',
'wm' => 'stream',
'wmv' => 'stream',
'wmx' => 'stream',
);
/* Auto variables. */
$scripturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$baseurlpatch = 'http://'.$_SERVER['HTTP_HOST'].$baseurl;
if (substr($baseurlpatch, -1, 1) != '/')
$baseurlpatch = $baseurlpatch . '/';
if (substr($basedir, -1, 1) != '/')
$basedir = $basedir . '/';
Header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<items>\r\n";
/* Check input param. */
if (isset($_GET['dir'])) {
//check this is okay.
$dir = rawurldecode($_GET['dir']);
$dirok = true;
if (substr($dir, -1, 1) != '/')
$dir = $dir . '/';
$dotdotdir = '';
$dirnames = split('/', $dir);
for ($di = 0; $di < sizeof($dirnames); $di ++) {
if ($di < (sizeof($dirnames)-1))
$dotdotdir = $dotdotdir . $dirnames[$di] . '/';
if ($dirnames[$di] == '..') {
$dirok = false;
break;
}
}
$dir = $dotdotdir;
if (substr($dir, 0, 1) == '/' || !is_dir($basedir.$dir))
$dirok = false;
} else {
$dir = '';
$dirok = true;
}
if ($dirok == false) {
echo " <playlist_name><![CDATA[Bad path: $basedir$dir]]></playlist_name>\r\n</items>\r\n";
die();
}
function format_bytes($bytes) {
if ($bytes < 1024) return $bytes.' B';
elseif ($bytes < 1048576) return round($bytes / 1024, 2).' KB';
elseif ($bytes < 1073741824) return round($bytes / 1048576, 2).' MB';
elseif ($bytes < 1099511627776) return round($bytes / 1073741824, 2).' GB';
else return round($bytes / 1099511627776, 2).' TB';
}
/* Write directory name as playlist name. */
echo " <playlist_name><![CDATA[$basedir$dir]]></playlist_name>\r\n";
/* Scan directory and add to play list.*/
$entries = scandir($basedir.$dir);
$channels_cnt = 0;
/* Add dirs to play list. */
foreach ($entries as $entry) {
if (substr($entry, 0, 1) != '.' && is_dir($basedir.$dir.$entry)) {
//$en_entry = urlencode($entry);
$en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
echo " <channel>\r\n";
echo " <title><![CDATA[$entry]]></title>\r\n";
echo " <playlist_url><![CDATA[$scripturl?dir=$dir$en_entry]]></playlist_url>\r\n";
echo " <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
echo " <description><![CDATA[$entry]]></description>";
echo " </channel>\r\n";
$channels_cnt ++;
}
}
/* Add files to play list. */
foreach ($entries as $entry) {
if (!is_dir($basedir.$dir.$entry)) {
$ext = strtolower(substr($entry, strrpos($entry, '.')+1));
if (!isset($filetypes[$ext])) /* Skeep unsupported file type. */
continue;
$en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
$size = format_bytes(filesize($basedir.$dir.$entry));
$date = date("F d Y, H:i:s", filectime($basedir.$dir.$entry));
echo " <channel>\r\n";
echo " <title><![CDATA[$entry]]></title>\r\n";
if ($filetypes[$ext] == 'playlist') {
echo " <playlist_url><![CDATA[$baseurlpatch$dir$en_entry]]></playlist_url>\r\n";
echo " <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
} else {
echo " <stream_url><![CDATA[$baseurlpatch$dir$en_entry]]></stream_url>\r\n";
echo " <logo_30x30><![CDATA[video.png]]></logo_30x30>\r\n";
echo " <size>$view_mode</size>\r\n";
if (isset($audiotrack_num))
echo " <audiotrack_num>$audiotrack_num</audiotrack_num>\r\n";
echo " <buffer>$total_buf_size</buffer>\r\n";
echo " <ibuffer>$initial_buf_size</ibuffer>\r\n";
}
echo " <description><![CDATA[$entry<br><br>Size: $size<br>Date: $date]]></description>";
echo " </channel>\r\n";
$channels_cnt ++;
}
}
if ($channels_cnt == 0) {/* Empty folder, add fake entry. */
echo " <channel>\r\n";
echo " <title><![CDATA[-Empty folder-]]></title>\r\n";
echo " <playlist_url>stop</playlist_url>\r\n";
echo " <logo_30x30><![CDATA[back.png]]></logo_30x30>\r\n";
echo " <description> </description>";
echo " </channel>\r\n";
}
echo '</items>';
?>
/* Config.*/
$basedir="/usr/data"; /* File system path. */
$baseurl="/DataStore"; /* URL path. */
/* Settings for Play. */
$view_mode="2"; /* 0 = 16x9 FULL, 1 = 14x9 ZOOM, 2 = ORIGINAL / 4x3 KINOZOOM,
* 3 = 16x9 ZOOM, 4 = 4x3
*/
//$audiotrack_num="1"; /* Default audio track num */
$total_buf_size="20"; /* megabytes; SetTotalBufferSize */
$initial_buf_size="8"; /* megabytes; SetInitialBuffer, SetPendingBuffer */
/* File types. */
$filetypes = array (
'm3u' => 'playlist',
'xml' => 'playlist',
'flv' => 'stream',
'f4v' => 'stream',
'3g2' => 'stream',
'3gp' => 'stream',
'3gp2' => 'stream',
'3gpp' => 'stream',
'asf' => 'stream',
'asx' => 'stream',
'avi' => 'stream',
'dat' => 'stream',
'iso' => 'stream',
'm2t' => 'stream',
'm2ts' => 'stream',
'm2v' => 'stream',
'm4v' => 'stream',
'mp3' => 'stream',
'mp2v' => 'stream',
'mp4' => 'stream',
'mp4v' => 'stream',
'mpe' => 'stream',
'mpeg' => 'stream',
'mpg' => 'stream',
'mov' => 'stream',
'mkv' => 'stream',
'mts' => 'stream',
'swf' => 'stream',
'vob' => 'stream',
'wm' => 'stream',
'wmv' => 'stream',
'wmx' => 'stream',
);
/* Auto variables. */
$scripturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$baseurlpatch = 'http://'.$_SERVER['HTTP_HOST'].$baseurl;
if (substr($baseurlpatch, -1, 1) != '/')
$baseurlpatch = $baseurlpatch . '/';
if (substr($basedir, -1, 1) != '/')
$basedir = $basedir . '/';
Header("Content-Type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<items>\r\n";
/* Check input param. */
if (isset($_GET['dir'])) {
//check this is okay.
$dir = rawurldecode($_GET['dir']);
$dirok = true;
if (substr($dir, -1, 1) != '/')
$dir = $dir . '/';
$dotdotdir = '';
$dirnames = split('/', $dir);
for ($di = 0; $di < sizeof($dirnames); $di ++) {
if ($di < (sizeof($dirnames)-1))
$dotdotdir = $dotdotdir . $dirnames[$di] . '/';
if ($dirnames[$di] == '..') {
$dirok = false;
break;
}
}
$dir = $dotdotdir;
if (substr($dir, 0, 1) == '/' || !is_dir($basedir.$dir))
$dirok = false;
} else {
$dir = '';
$dirok = true;
}
if ($dirok == false) {
echo " <playlist_name><![CDATA[Bad path: $basedir$dir]]></playlist_name>\r\n</items>\r\n";
die();
}
function format_bytes($bytes) {
if ($bytes < 1024) return $bytes.' B';
elseif ($bytes < 1048576) return round($bytes / 1024, 2).' KB';
elseif ($bytes < 1073741824) return round($bytes / 1048576, 2).' MB';
elseif ($bytes < 1099511627776) return round($bytes / 1073741824, 2).' GB';
else return round($bytes / 1099511627776, 2).' TB';
}
/* Write directory name as playlist name. */
echo " <playlist_name><![CDATA[$basedir$dir]]></playlist_name>\r\n";
/* Scan directory and add to play list.*/
$entries = scandir($basedir.$dir);
$channels_cnt = 0;
/* Add dirs to play list. */
foreach ($entries as $entry) {
if (substr($entry, 0, 1) != '.' && is_dir($basedir.$dir.$entry)) {
//$en_entry = urlencode($entry);
$en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
echo " <channel>\r\n";
echo " <title><![CDATA[$entry]]></title>\r\n";
echo " <playlist_url><![CDATA[$scripturl?dir=$dir$en_entry]]></playlist_url>\r\n";
echo " <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
echo " <description><![CDATA[$entry]]></description>";
echo " </channel>\r\n";
$channels_cnt ++;
}
}
/* Add files to play list. */
foreach ($entries as $entry) {
if (!is_dir($basedir.$dir.$entry)) {
$ext = strtolower(substr($entry, strrpos($entry, '.')+1));
if (!isset($filetypes[$ext])) /* Skeep unsupported file type. */
continue;
$en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
$size = format_bytes(filesize($basedir.$dir.$entry));
$date = date("F d Y, H:i:s", filectime($basedir.$dir.$entry));
echo " <channel>\r\n";
echo " <title><![CDATA[$entry]]></title>\r\n";
if ($filetypes[$ext] == 'playlist') {
echo " <playlist_url><![CDATA[$baseurlpatch$dir$en_entry]]></playlist_url>\r\n";
echo " <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
} else {
echo " <stream_url><![CDATA[$baseurlpatch$dir$en_entry]]></stream_url>\r\n";
echo " <logo_30x30><![CDATA[video.png]]></logo_30x30>\r\n";
echo " <size>$view_mode</size>\r\n";
if (isset($audiotrack_num))
echo " <audiotrack_num>$audiotrack_num</audiotrack_num>\r\n";
echo " <buffer>$total_buf_size</buffer>\r\n";
echo " <ibuffer>$initial_buf_size</ibuffer>\r\n";
}
echo " <description><![CDATA[$entry<br><br>Size: $size<br>Date: $date]]></description>";
echo " </channel>\r\n";
$channels_cnt ++;
}
}
if ($channels_cnt == 0) {/* Empty folder, add fake entry. */
echo " <channel>\r\n";
echo " <title><![CDATA[-Empty folder-]]></title>\r\n";
echo " <playlist_url>stop</playlist_url>\r\n";
echo " <logo_30x30><![CDATA[back.png]]></logo_30x30>\r\n";
echo " <description> </description>";
echo " </channel>\r\n";
}
echo '</items>';
?>