За последние 24 часа нас посетили 25745 программистов и 1726 роботов. Сейчас ищут 867 программистов ...

Скрипт не распознает кириллицу

Тема в разделе "Прочие вопросы по PHP", создана пользователем First, 16 апр 2015.

  1. First

    First Новичок

    С нами с:
    16 апр 2015
    Сообщения:
    1
    Симпатии:
    0
    Всем привет!
    Есть маленькая проблема, суть следующая:
    На Windows XP SP3 запущены nginx 1.7 + PHP 5.3
    Данную связку использую как домашний медиа-сервер для просмотра скачанного с торрентов видео на телевизоре Samsung с установленным nStream, в расшаренной папке на компе лежит скрипт на пхп, который генерирует XML плей-лист для nStream, при помощи данного скрипта можно как в файловом менеджере гулять по папкам и открывать файлы и папки. Все работает на ура, пока в папке не появляется файл на кириллице, от кириллических символов скрипт падает, поскольку с PHP только начал дружить, опыта и знаний еще не имею, поэтому прошу помочь ( втом числе и возмездно) подправить скрипт так чтобы он понимал кириллицу.

    Код (Text):
    1. <?php
    2.  
    3. /* Copyright (c) 2012 Rozhuk Ivan <rozhuk.im@gmail.com> */
    4.  
    5. /* Config.*/
    6. $basedir="D:/nstreamvod/myportal/localhost"; /* File system path. */
    7. $baseurl="/myportal/localhost"; /* URL path. */
    8.  
    9. /* File types. */
    10. $filetypes = array (
    11.             'm3u' => 'playlist',
    12.             'xml' => 'playlist',
    13.             'flv' => 'stream',
    14.             'f4v' => 'stream',
    15.             '3g2' => 'stream',
    16.             '3gp' => 'stream',
    17.             '3gp2' => 'stream',
    18.             '3gpp' => 'stream',
    19.             'asf' => 'stream',
    20.             'asx' => 'stream',
    21.             'avi' => 'stream',
    22.             'dat' => 'stream',
    23.             'iso' => 'stream',
    24.             'm2t' => 'stream',
    25.             'm2ts' => 'stream',
    26.             'm2v' => 'stream',
    27.             'm4v' => 'stream',
    28.             'mp3' => 'stream',
    29.             'mp2v' => 'stream',
    30.             'mp4' => 'stream',
    31.             'mp4v' => 'stream',
    32.             'mpe' => 'stream',
    33.             'mpeg' => 'stream',
    34.             'mpg' => 'stream',
    35.             'mov' => 'stream',
    36.             'mkv' => 'stream',
    37.             'mts' => 'stream',
    38.             'swf' => 'stream',
    39.             'vob' => 'stream',
    40.             'wm' => 'stream',
    41.             'wmv' => 'stream',
    42.             'wmx' => 'stream',
    43.         );
    44.  
    45.  
    46. /* Auto variables. */
    47. $scripturl = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
    48. $baseurlpatch = 'http://'.$_SERVER['HTTP_HOST'].$baseurl;
    49. if (substr($baseurlpatch, -1, 1) != '/')
    50.     $baseurlpatch = $baseurlpatch . '/';
    51. if (substr($basedir, -1, 1) != '/')
    52.     $basedir = $basedir . '/';
    53.  
    54. ini_set('default_charset', 'utf-8');
    55.  
    56. Header("Content-Type: text/xml");
    57. echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n<items>\r\n";
    58.  
    59.  
    60. /* Check input param. */
    61. if (isset($_GET['dir'])) {
    62.     //check this is okay.
    63.    
    64.     $dir = rawurldecode($_GET['dir']);
    65.     $dirok = true;
    66.     if (substr($dir, -1, 1) != '/')
    67.         $dir = $dir . '/';
    68.  
    69.     $dotdotdir = '';
    70.     $dirnames = split('/', $dir);
    71.     for ($di = 0; $di < sizeof($dirnames); $di ++) {
    72.         if ($di < (sizeof($dirnames)-1))
    73.             $dotdotdir = $dotdotdir . $dirnames[$di] . '/';
    74.         if ($dirnames[$di] == '..') {
    75.             $dirok = false;
    76.             break;
    77.         }
    78.     }
    79.     $dir = $dotdotdir;
    80.    
    81.     if (substr($dir, 0, 1) == '/' || !is_dir($basedir.$dir))
    82.         $dirok = false;
    83. } else {
    84.     $dir = '';
    85.     $dirok = true;
    86. }
    87. if ($dirok == false) {
    88.     echo "  <playlist_name><![CDATA[Bad path: $basedir$dir]]></playlist_name>\r\n</items>\r\n";
    89.     die();
    90. }
    91.  
    92.  
    93. function format_bytes($bytes) {
    94.     if ($bytes < 1024) return $bytes.' B';
    95.     elseif ($bytes < 1048576) return round($bytes / 1024, 2).' KB';
    96.     elseif ($bytes < 1073741824) return round($bytes / 1048576, 2).' MB';
    97.     elseif ($bytes < 1099511627776) return round($bytes / 1073741824, 2).' GB';
    98.     else return round($bytes / 1099511627776, 2).' TB';
    99. }
    100.  
    101.  
    102. /* Write directory name as playlist name. */
    103. echo "  <playlist_name><![CDATA[$basedir$dir]]></playlist_name>\r\n";
    104.  
    105. /* Scan directory and add to play list.*/
    106. $entries = scandir($basedir.$dir);
    107. $channels_cnt = 0;
    108. /* Add dirs to play list. */
    109. foreach ($entries as $entry) {
    110.     if (substr($entry, 0, 1) != '.' && is_dir($basedir.$dir.$entry)) {
    111.         //$en_entry = urlencode($entry);
    112.         $en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
    113.         echo "  <channel>\r\n";
    114.         echo "      <title><![CDATA[$entry]]></title>\r\n";
    115.         echo "      <playlist_url><![CDATA[$scripturl?dir=$dir$en_entry]]></playlist_url>\r\n";
    116.         echo "      <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
    117.         echo "      <description><![CDATA[$entry]]></description>";
    118.         echo "  </channel>\r\n";
    119.         $channels_cnt ++;
    120.     }
    121. }
    122. /* Add files to play list. */
    123. foreach ($entries as $entry) {
    124.     if (!is_dir($basedir.$dir.$entry)) {
    125.         $ext = strtolower(substr($entry, strrpos($entry, '.')+1));
    126.         if (!isset($filetypes[$ext])) /* Skeep unsupported file type. */
    127.             continue;
    128.  
    129.         $en_entry = implode("/", array_map("rawurlencode", explode("/", $entry)));
    130.         $size = format_bytes(filesize($basedir.$dir.$entry));
    131.         $date = date("F d Y, H:i:s", filectime($basedir.$dir.$entry));
    132.  
    133.         echo "  <channel>\r\n";
    134.         echo "      <title><![CDATA[$entry]]></title>\r\n";
    135.         if ($filetypes[$ext] == 'playlist') {
    136.             echo "      <playlist_url><![CDATA[$baseurlpatch$dir$en_entry]]></playlist_url>\r\n";
    137.             echo "      <logo_30x30><![CDATA[open.png]]></logo_30x30>\r\n";
    138.        
    139.         } else {
    140.             echo "      <stream_url><![CDATA[$baseurlpatch$dir$en_entry]]></stream_url>\r\n";
    141.             echo "      <logo_30x30><![CDATA[video.png]]></logo_30x30>\r\n";
    142.             if (isset($audiotrack_num))
    143.                 echo "      <audiotrack_num>$audiotrack_num</audiotrack_num>\r\n";
    144.         }
    145.         echo "      <description><![CDATA[$entry<br><br>Size:  $size<br>Date:  $date]]></description>";
    146.         echo "  </channel>\r\n";
    147.         $channels_cnt ++;
    148.     }
    149. }
    150. if ($channels_cnt == 0) {/* Empty folder, add fake entry. */
    151.     echo "  <channel>\r\n";
    152.     echo "      <title><![CDATA[-Empty folder-]]></title>\r\n";
    153.     echo "      <playlist_url>stop</playlist_url>\r\n";
    154.     echo "      <logo_30x30><![CDATA[back.png]]></logo_30x30>\r\n";
    155.     echo "      <description> </description>";
    156.     echo "  </channel>\r\n";
    157. }
    158.  
    159. echo '<prev_page_url text="Назад"><![CDATA[http://nstreamvod/myportal/myportal.xml]]></prev_page_url>';
    160.  
    161. echo '</items>';
    162.  
    163. ?>
     
  2. bodya7979

    bodya7979 Новичок

    С нами с:
    9 мар 2015
    Сообщения:
    7
    Симпатии:
    0