ugrás a tartalomhoz

Link dekódolás

Gam3R · 2010. Már. 17. (Sze), 05.34
Van nekem egy ilyenem:
  1. <?  
  2. Mappa Listázó Script - 2-es Verzió  
  3. ====================================  
  4. KONFIGURÁCIÓ  
  5. =============  
  6. Itt lehet testreszabni a Mappa Listázót.  
  7. Az alapbeállításokon úgy lehet változtatni,hogy vagy engedélyezzük az adott funkciót (true) vagy kikapcsoljuk (false).  
  8. Máskor konkrét adatra lesz szükség (lásd ott..).  
  9.   
  10. 1) Kiinduló mappa -  
  11. Ha Főmappának azt kívánjuk megjeleníteni ahova fel lett töltve a script,akkor maradjon így: '.', ellenkező esetben az idézőjelek közé be kell írni a mappa relatív útvonalát,mely ahhoz a könyvtárhoz képest értékelődik ki,amelyben az index.php megtalálható.  
  12. */  
  13. $startdir = '.';  
  14.   
  15. /* 
  16. 2) Előnézet - 
  17. Képfájlokat rámutatás esetén a script automatikusan megjelenít egy előnézeti képben. 
  18. A funkció kikapcsolásához írjuk át false-ra. 
  19. A helyes működéshez szükség van GD2 installálásához. 
  20. */  
  21. $showthumbnails = true;  
  22.   
  23. /* 
  24. 3) Almappák listázása - 
  25. Almappák elérhetők legyenek? 
  26. */  
  27. $showdirs = true;  
  28.   
  29. /* 
  30. 4) Erőltetett letöltés - 
  31. A listázott fájlra való klikkelés esetén a böngésző azt automatikusan megnyitja. Amennyiben a megnyitás helyett a letöltést forszírozzuk,akkor állítsuk true-ra. 
  32. */  
  33. $forcedownloads = false;  
  34.   
  35. /* 
  36. 5) Tartalmak elrejtése - 
  37. Ha bizonyos fájlokat illetve mappákat nem kívánunk megjeleníteni,akkor azt itt lehet megtenni. Az elrejtés a fájl/mappa neve alapján történik. 
  38. Ha egy fájlnév bármely része egyezik a beírttal,akkor azt el fogja rejteni! 
  39. */  
  40. $hide = array(  
  41. 'dlf',  
  42. 'index.php',  
  43. 'Thumbs',  
  44. '.htaccess',  
  45. '.htpasswd'  
  46. );  
  47.   
  48. /* 
  49. 6) Index fájlok megjelenítése - 
  50. Ha egy mappában index fájl található,akkor a listázás helyett a böngésző azt fogja megnyitni. Amennyiben ezt szeretnénk elkerülni,maradjon false-on a beállítás. 
  51. */  
  52. $displayindex = false;  
  53.   
  54. /* 
  55. 7) Feltöltések engedélyezése - 
  56. Engedélyezés esetén,a felhasználók szabadon tudnak majd feltölteni bármely megjelenített mappába. 
  57. Ha hiba lép fel,a legvalószinűbb,hogy nincs megadva mások számára írási jog. 
  58. Ezen Total Commanderrel változtathatunk. Ki kell jelöli a mappát,majd klikk a Fájl menüpontra,azon belül pedig az attribútumok módosítására és adjunk 777 jogot neki. 
  59. */  
  60. $allowuploads = false;  
  61.   
  62. /* 
  63. 8) Fájlok felülírása - 
  64. Ha egy felhasználó által feltöltött fájl neve azonos a már meglévővel,akkor azt felülírja? 
  65. */  
  66. $overwrite = false;  
  67.   
  68. /* 
  69. 9) Index fájlok - 
  70. A következő felsorolásban találjuk azokat az index fájlokat,amelyeket a script azon esetben fog megnyitni,ha korábban azt engedélyeztük ($displayindex = true). 
  71. Szabadon elvehető illetve hozzáadható tartalom. 
  72. Ha korábban már kikapcsoltuk ($displayindex = false) akkor a megszokott módon csak listázni fogja ezeket. 
  73. */  
  74.   
  75. $indexfiles = array (  
  76. 'index.html',  
  77. 'index.htm',  
  78. 'default.htm',  
  79. 'default.html'  
  80. );  
  81.   
  82. /* 
  83. 10) Ikonok - 
  84. Ha fel nem sorolt kiterjesztéshez szeretnénk ikont hozzáadni,akkor azt itt lehet megtenni. 
  85. Egy adott kiterjesztéshez egy bizonyos ikon rendelhető a következő formátumban 'kiterjesztés' => 'fájlnév', 
  86. A működéshez ezeket a képfájlokat fel kell tölteni a dlf nevű mappába. 
  87. Ha a már meglévő ikonokat kívánjuk másikra lecserélni,akkor nincs más teendő,mint a dlf mappában kicserélni a képet,ügyelve a pontos név megtartására. 
  88. Ikonok optimális mérete: 16 x 16 képpont. 
  89. */  
  90. $filetypes = array (  
  91. 'png' => 'jpg.gif',  
  92. 'jpeg' => 'jpg.gif',  
  93. 'bmp' => 'jpg.gif',  
  94. 'jpg' => 'jpg.gif',  
  95. 'gif' => 'gif.gif',  
  96. 'zip' => 'archive.png',  
  97. 'rar' => 'archive.png',  
  98. 'exe' => 'exe.gif',  
  99. 'setup' => 'setup.gif',  
  100. 'txt' => 'text.png',  
  101. 'htm' => 'html.gif',  
  102. 'html' => 'html.gif',  
  103. 'fla' => 'fla.gif',  
  104. 'swf' => 'swf.gif',  
  105. 'xls' => 'xls.gif',  
  106. 'doc' => 'doc.gif',  
  107. 'sig' => 'sig.gif',  
  108. 'fh10' => 'fh10.gif',  
  109. 'pdf' => 'pdf.gif',  
  110. 'psd' => 'psd.gif',  
  111. 'rm' => 'real.gif',  
  112. 'mpg' => 'video.gif',  
  113. 'mpeg' => 'video.gif',  
  114. 'mov' => 'video2.gif',  
  115. 'avi' => 'video.gif',  
  116. 'eps' => 'eps.gif',  
  117. 'gz' => 'archive.png',  
  118. 'asc' => 'sig.gif',  
  119. );  
  120.   
  121. /* 
  122. A beállításoknak vége! Most már készen áll,hogy feltöltsük a szerverre. 
  123.  
  124. <--INNENTŐL MÁR CSAK ABBAN AZ ESETBEN MÓDOSÍTSUNK,HA TUDJUK MIT CSINÁLUNK!--> 
  125.  
  126. */  
  127. error_reporting(0);  
  128. if(!function_exists('imagecreatetruecolor')) $showthumbnails = false;  
  129. $leadon = $startdir;  
  130. if($leadon=='.'$leadon = '';  
  131. if((substr($leadon, -1, 1)!='/') && $leadon!=''$leadon = $leadon . '/';  
  132. $startdir = $leadon;  
  133.   
  134. if($_GET['dir']) {  
  135. //check this is okay.  
  136.   
  137. if(substr($_GET['dir'], -1, 1)!='/') {  
  138. $_GET['dir'] = $_GET['dir'] . '/';  
  139. }  
  140.   
  141. $dirok = true;  
  142. $dirnames = split('/'$_GET['dir']);  
  143. for($di=0; $di<sizeof($dirnames); $di++) {  
  144.   
  145. if($di<(sizeof($dirnames)-2)) {  
  146. $dotdotdir = $dotdotdir . $dirnames[$di] . '/';  
  147. }  
  148.   
  149. if($dirnames[$di] == '..') {  
  150. $dirok = false;  
  151. }  
  152. }  
  153.   
  154. if(substr($_GET['dir'], 0, 1)=='/') {  
  155. $dirok = false;  
  156. }  
  157.   
  158. if($dirok) {  
  159. $leadon = $leadon . $_GET['dir'];  
  160. }  
  161. }  
  162.   
  163. if($_GET['download'] && $forcedownloads) {  
  164. $file = str_replace('/'''$_GET['download']);  
  165. $file = str_replace('..'''$file);  
  166.   
  167. if(file_exists($leadon . $file)) {  
  168. header("Content-type: application/x-download");  
  169. header("Content-Length: ".filesize($leadon . $file));  
  170. header('Content-Disposition: attachment; filename="'.$file.'"');  
  171. readfile($leadon . $file);  
  172. die();  
  173. }  
  174. }  
  175.   
  176. if($allowuploads && $_FILES['file']) {  
  177. $upload = true;  
  178. if(!$overwrite) {  
  179. if(file_exists($leadon.$_FILES['file']['name'])) {  
  180. $upload = false;  
  181. }  
  182. }  
  183.   
  184. if($upload) {  
  185. move_uploaded_file($_FILES['file']['tmp_name'], $leadon . $_FILES['file']['name']);  
  186. }  
  187. }  
  188.   
  189. $opendir = $leadon;  
  190. if(!$leadon$opendir = '.';  
  191. if(!file_exists($opendir)) {  
  192. $opendir = '.';  
  193. $leadon = $startdir;  
  194. }  
  195.   
  196. clearstatcache();  
  197. if ($handle = opendir($opendir)) {  
  198. while (false !== ($file = readdir($handle))) {  
  199. //first see if this file is required in the listing  
  200. if ($file == "." || $file == "..")  continue;  
  201. $discard = false;  
  202. for($hi=0;$hi<sizeof($hide);$hi++) {  
  203. if(strpos($file$hide[$hi])!==false) {  
  204. $discard = true;  
  205. }  
  206. }  
  207.   
  208. if($discardcontinue;  
  209. if (##kukac##filetype($leadon.$file) == "dir") {  
  210. if(!$showdirscontinue;  
  211.   
  212. $n++;  
  213. if($_GET['sort']=="date") {  
  214. $key = @filemtime($leadon.$file) . ".$n";  
  215. }  
  216. else {  
  217. $key = $n;  
  218. }  
  219. $dirs[$key] = $file . "/";  
  220. }  
  221. else {  
  222. $n++;  
  223. if($_GET['sort']=="date") {  
  224. $key = @filemtime($leadon.$file) . ".$n";  
  225. }  
  226. elseif($_GET['sort']=="size") {  
  227. $key = @filesize($leadon.$file) . ".$n";  
  228. }  
  229. else {  
  230. $key = $n;  
  231. }  
  232. $files[$key] = $file;  
  233.   
  234. if($displayindex) {  
  235. if(in_array(strtolower($file), $indexfiles)) {  
  236. header("Location: $file");  
  237. die();  
  238. }  
  239. }  
  240. }  
  241. }  
  242. closedir($handle);  
  243. }  
  244.   
  245. //sort our files  
  246. if($_GET['sort']=="date") {  
  247. @ksort($dirs, SORT_NUMERIC);  
  248. @ksort($files, SORT_NUMERIC);  
  249. }  
  250. elseif($_GET['sort']=="size") {  
  251. @natcasesort($dirs);  
  252. @ksort($files, SORT_NUMERIC);  
  253. }  
  254. else {  
  255. @natcasesort($dirs);  
  256. @natcasesort($files);  
  257. }  
  258.   
  259. //order correctly  
  260. if($_GET['order']=="desc" && $_GET['sort']!="size") {$dirs = @array_reverse($dirs);}  
  261. if($_GET['order']=="desc") {$files = @array_reverse($files);}  
  262. $dirs = @array_values($dirs); $files = @array_values($files);  
  263.   
  264.   
  265. ?>  
  266. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  267. <html xmlns="http://www.w3.org/1999/xhtml">  
  268. <head>  
  269. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />  
  270. <title>Mappa listázása...</title>  
  271. <link rel="stylesheet" type="text/css" href="dlf/styles.css" />  
  272. <?  
  273. if($showthumbnails) {  
  274. ?>  
  275. <script language="javascript" type="text/javascript">  
  276. <!--  
  277. function o(n, i) {  
  278. document.images['thumb'+n].src = 'dlf/i.php?f='+i;  
  279.   
  280. }  
  281.   
  282. function f(n) {  
  283. document.images['thumb'+n].src = 'dlf/trans.gif';  
  284. }  
  285. //-->  
  286. </script>  
  287. <?  
  288. }  
  289. ?>  
  290. </head>  
  291. <body>  
  292. <div id="container">  
  293.   <h1>Könyvtár: <?=dirname($_SERVER['PHP_SELF']).'/'.$leadon;?></h1>  
  294.   <div id="breadcrumbs"> <a href="<?=$_SERVER['PHP_SELF'];?>">Főmappa</a>  
  295.   <?  
  296.   $breadcrumbs = split('/'$leadon);  
  297.   if(($bsize = sizeof($breadcrumbs))>0) {  
  298.   $sofar = '';  
  299.   for($bi=0;$bi<($bsize-1);$bi++) {  
  300. $sofar = $sofar . $breadcrumbs[$bi] . '/';  
  301. echo ' &gt; <a href="'.$_SERVER['PHP_SELF'].'?dir='.urlencode($sofar).'">'.$breadcrumbs[$bi].'</a>';  
  302. }  
  303.   }  
  304.    
  305. $baseurl = $_SERVER['PHP_SELF'] . '?dir='.$_GET['dir'] . '&amp;';  
  306. $fileurl = 'sort=name&amp;order=asc';  
  307. $sizeurl = 'sort=size&amp;order=asc';  
  308. $dateurl = 'sort=date&amp;order=asc';  
  309.   
  310. switch ($_GET['sort']) {  
  311. case 'name':  
  312. if($_GET['order']=='asc'$fileurl = 'sort=name&amp;order=desc';  
  313. break;  
  314. case 'size':  
  315. if($_GET['order']=='asc'$sizeurl = 'sort=size&amp;order=desc';  
  316. break;  
  317.   
  318. case 'date':  
  319. if($_GET['order']=='asc'$dateurl = 'sort=date&amp;order=desc';  
  320. break;   
  321. default:  
  322. $fileurl = 'sort=name&amp;order=desc';  
  323. break;  
  324. }  
  325.   ?>  
  326.   </div>  
  327.   <div id="listingcontainer">  
  328.     <div id="listingheader">  
  329. <div id="headerfile"><a href="<?=$baseurl . $fileurl;?>">Fájl neve</a></div>  
  330. <div id="headersize"><a href="<?=$baseurl . $sizeurl;?>">Méret</a></div>  
  331. <div id="headermodified"><a href="<?=$baseurl . $dateurl;?>">Utoljára módosítva</a></div>  
  332. </div>  
  333.     <div id="listing">  
  334. <?  
  335. $class = 'b';  
  336. if($dirok) {  
  337. ?>  
  338. <div><a href="<?=$_SERVER['PHP_SELF'].'?dir='.urlencode($dotdotdir);?>" class="<?=$class;?>"><img src="dlf/dirup.png" alt="Vissza" /><strong>..</strong> <em>-</em> <?=date ("Y-m-d"filemtime($dotdotdir));?></a></div>  
  339. <?  
  340. if($class=='b'$class='w';  
  341. else $class = 'b';  
  342. }  
  343. $arsize = sizeof($dirs);  
  344. for($i=0;$i<$arsize;$i++) {  
  345. ?>  
  346. <div><a href="<?=$_SERVER['PHP_SELF'].'?dir='.urlencode($leadon.$dirs[$i]);?>" class="<?=$class;?>"><img src="dlf/folder.png" alt="<?=$dirs[$i];?>" /><strong><?=$dirs[$i];?></strong> <em>-</em> <?=date ("Y-m-d"filemtime($leadon.$dirs[$i]));?></a></div>  
  347. <?  
  348. if($class=='b'$class='w';  
  349. else $class = 'b';  
  350. }  
  351.   
  352. $arsize = sizeof($files);  
  353. for($i=0;$i<$arsize;$i++) {  
  354. $icon = 'unknown.png';  
  355. $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1));  
  356. $supportedimages = array('gif''png''jpeg''jpg');  
  357. $thumb = '';  
  358.   
  359. if($showthumbnails && in_array($ext$supportedimages)) {  
  360. $thumb = '<span><img src="dlf/trans.gif" alt="'.$files[$i].'" name="thumb'.$i.'" /></span>';  
  361. $thumb2 = ' onmouseover="o('.$i.', \''.urlencode($leadon . $files[$i]).'\');" onmouseout="f('.$i.');"';  
  362.   
  363. }  
  364.   
  365. if($filetypes[$ext]) {  
  366. $icon = $filetypes[$ext];  
  367. }  
  368.   
  369. $filename = $files[$i];  
  370. if(strlen($filename)>43) {  
  371. $filename = substr($files[$i], 0, 40) . '...';  
  372. }  
  373.   
  374. $fileurl = $leadon . $files[$i];  
  375. if($forcedownloads) {  
  376. $fileurl = $_SESSION['PHP_SELF'] . '?dir=' . urlencode($leadon) . '&download=' . urlencode($files[$i]);  
  377. }  
  378.   
  379. ?>  
  380. <div><a href="<?=$fileurl;?>" target="_blank" class="<?=$class;?>"<?=$thumb2;?>><img src="dlf/<?=$icon;?>" alt="<?=$files[$i];?>" /><strong><?=$filename;?></strong> <em><?=round(filesize($leadon.$files[$i])/1024);?>KB</em> <?=date ("Y-m-d"filemtime($leadon.$files[$i]));?><?=$thumb;?></a></div>  
  381. <?  
  382. if($class=='b'$class='w';  
  383. else $class = 'b';  
  384. }  
  385. ?></div>  
  386.   
  387.   
  388.   
  389.   </div>  
  390. </div>  
  391. </body>  
  392. </html>  
A problémám az lenne hogy az ékezetes fájlokat nem támogatja... Tehát ha a fájl neve az hogy "Pokoli szomszédok.rar", akkor a listázó úgy nyitja meg hogy http://xy/Pokoli szomszédok.rar... De mivel a böngésző nem kezeli az ékezetes karaktereket, ezért 404-est ír.
Helyesen így lenne: http://xy/Pokoli%20Szomsz%E9dok%205.rar

Hogy lehetne megoldani, hogy ékezetes fájlokat is megnyisson 404-es nélkül?

Kösz! :)
 
1

urlencode

Poetro · 2010. Már. 17. (Sze), 11.56
Az URL-ek paramétereinek kódolását mindenképpen meg kell tenni, azaz a
  1. $fileurl = $_SESSION['PHP_SELF'] . '?dir=' . urlencode($leadon) . '&download=' . urlencode($files[$i]);    
Minden esetben kell link kirakása esetében.