Всем привет! Есть маленькая проблема, суть следующая: На Windows XP SP3 запущены nginx 1.7 + PHP 5.3 Данную связку использую как домашний медиа-сервер для просмотра скачанного с торрентов видео на телевизоре Samsung с установленным nStream, в расшаренной папке на компе лежит скрипт на пхп, который генерирует XML плей-лист для nStream, при помощи данного скрипта можно как в файловом менеджере гулять по папкам и открывать файлы и папки. Все работает на ура, пока в папке не появляется файл на кириллице, от кириллических символов скрипт падает, поскольку с PHP только начал дружить, опыта и знаний еще не имею, поэтому прошу помочь ( втом числе и возмездно) подправить скрипт так чтобы он понимал кириллицу. Код (Text): <?php /* Copyright (c) 2012 Rozhuk Ivan <rozhuk.im@gmail.com> */ /* Config.*/ $basedir="D:/nstreamvod/myportal/localhost"; /* File system path. */ $baseurl="/myportal/localhost"; /* URL path. */ /* 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 . '/'; ini_set('default_charset', 'utf-8'); 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"; if (isset($audiotrack_num)) echo " <audiotrack_num>$audiotrack_num</audiotrack_num>\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 '<prev_page_url text="Назад"><![CDATA[http://nstreamvod/myportal/myportal.xml]]></prev_page_url>'; echo '</items>'; ?>