Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zank & ampersand w nazwie pliku
Forum PHP.pl > Forum > Przedszkole
slawekdw
Witam
Mam skrypt zarządzajacy zawartościa katalogów z poziomu przegladarki. Umożliwia on Upload, Download, i Kasowanie plików. Niestety , o ile poradziłem sobie z polskimi znakami w nazwi pliku, nie potrafie Uploadowac, Skasować czy tez pobrac pliku który posiada znak & ampersand w nazwie. Czy istnieje na to jakieś rozwiązanie, procz oczywiście wykluczenia stosowanie takiego znaku w nazwie pliku. Poniżej kod skryptu.
CODE
<?php

session_start();
if(!isset($katalog)) {
echo 'Brak dostępu. Zaloguj sie jako administrator';
exit;
}
if(!is_null($_POST["kat"]) && $_POST["kat"] != "") {
$_SESSION['folder']= $_POST["kat"];
}

$readpath = "/$katalog/$folder/";
$hide = array( 'resources',
'index.php',
'.htaccess',
'.htpasswd',
'.DS_Store');

error_reporting(E_ERROR);
if ($_GET['download']) {
$file = str_replace('/', '', $_GET['download']);
$file = str_replace('..', '', $file);
$file = $readpath.$file;


if (file_exists($file)) {
header("Content-type: application/x-download");
header("Content-Length: ".filesize($file));
header('Content-Disposition: attachment; filename="' . str_replace($readpath, '', $file) . '"');
readfile($file);
die();
}
}
$handle = opendir($readpath);

// If deleting
if (isset($_GET['rmfile'])) {
unlink($readpath . $_GET['rmfile']);
}

// If uploading
if ($_FILES['file']) {
$success = move_uploaded_file($_FILES['file']['tmp_name'], $readpath. $_FILES['file']['name']);
}
$key=0;
while ($file = readdir($handle)) {

if ($file == "." || $file == ".." || in_array($file, $hide)) continue;

$key++;
$files[$key] = $file;
}

closedir($handle);

// ksort($files, SORT_NUMERIC);
$files = array_reverse($files);

?>

<!DOCTYPE html>
<html>

<head>
<title>Manager plikow Klienta</title>
<link rel="stylesheet" type="text/css" href="images/styles.css">

</head>

<body>

<table border="0" cellspacing="5" cellpadding="5">

<?php

for ($i=0; $i<count($files); $i++) {

$filename = $files[$i];


?>

<tr>
<td><a href="manager.php?download=<?php echo $filename; ?>"><?php echo $filename; ?></a></td>
<td><a href="manager.php?rmfile=<?php echo $filename; ?>">Kasuj</a></td>
</tr>
<?php };?>

</table>

<div id="upload">
<div style="text-align: left; color: rgb(51, 102, 255);"><span
style="font-family: Verdana; ">Wybierz plik do wgrania</span><p>
</p>

<form method="post" action="manager.php" enctype="multipart/form-data">
<p><input type="file" name="file"></p>
<p></center><input type="submit" value="Wgraj plik"></p>
</form>
<div id="wybor">
<div style="text-align: left; color: rgb(51, 102, 255);"><span
style="font-family: Verdana; ">Wybierz katalog</span><p>
</p>
<form action="manager.php" method="post" name="Wybierz katalog">
<select name="kat" >
<option selected="selected" value="Dane">Podstawowe informacje</option>
<option value="Download">Download</option>
<option value="Info">Informacje</option>
<option value="Deklaracje">Deklaracje</option>
<option value="Archiwum">Archiwum</option>
</select>
<p><input type="submit" value="Zatwierdz"></p>
</form>
</div>



</body>

</html>
piotrooo89
możesz np zamienić znak & na _ albo jakiś inny znak...
slawekdw
No włanie , zmiana znaku nie wchodzi w gre.
erix
Tzn. jak dasz unlink z nazwą z "&", to nie kasuje, czy tylko wówczas, gdy przychodzi on od użytkownika?
slawekdw
żadnej operacji na pliku z znakiem & nie da sie przeprowadzić za pomocą tego skryptu
piotrooo89
a coś takiego Ci nie pomoże, zmiana & na ASCII: http://api.drupal.org/api/function/drupal_urlencode/5
slawekdw
A nie ma innej możliwosci ? Zmiana na ASCII powoduje to ze plik nie wyświetla sie ze znakiem &. Nie jestem buegły w php, ale czy nie mozna traktować plików za pomocą tego skryptu jako ciągu znaków np ? Pewnie to jakaś prosta sprawa i klamerki w skrypcie.
erix
A na jakim systemie działa serwer?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.