Witam,
oto opis sytuacji. Muszę napisać skrypt, który będzie wysyłał pliki na serwer, przeglądał je, kasował. Ma też być możliwość pobrania pliku z serwera. Dodatkowe założenie: wszystko ma być zawarte w jednym pliku php.
To jest to, co do tej pory stworzyłem:
<?php
$id = $_GET['id'];
if($id != 0)
{
$plik = "pliki/".$id;
header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
}
?>
<?php
$MaxFileSize=100000;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pliki</title>
<style type="text/css">
body {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
background-color: #EBEBEB;
}
</style>
</head>
<body>
<h1>Serwer</h1>
<hr />
<h3>Dodaj pliki:</h3>
<?php
// upload plików
if($id == 0)
{
for($i = 0; $i < count($_FILES["pliki"]["name"]); $i++) {
$spr_nazwe = split(" ", $_FILES['pliki']['name'][$i]);
if(count($spr_nazwe) > 1
) echo "<div style=\"color:red; text-align:center\">Niedozwolone uzycie spacji w nazwie pliku:<b> ".$_FILES['pliki']['name'][$i]."</b>.</div><br />"; else
{
$UploadFile = "pliki/".$_FILES['pliki']['name'][$i];
{
if ($_FILES['pliki']['size'][$i] > $MaxFileSize)
{
echo "<div style=\"color:red; text-align:center\">Plik nr $i jest za duży!</div><br />"; }
else
{
{
echo "<div style=\"color:green; text-align:center\">Plik:<b> ".$_FILES['pliki']['name'][$i]."</b> został poprawnie uploadowany i skopiowany w nowe miejsce</div><br />"; }
else
{
echo "<div style=\"color:red; text-align:center\">Błąd przy uploadowaniu pliku:<b> ".$_FILES['pliki']['name'][$i]."</b>.</div><br />"; }
}
}
}
}
}
?>
<div align="center">
<form enctype="multipart/form-data" method="post" action="przegladarka.php">
<input type="hidden" name="MAX_FILE_SIZE" value="
<?php echo $MaxFileSize;?>">
<table bgcolor="#A0A0A0">
<tr>
<td>Plik 1:</td> <td><input type="file" size="40" name="pliki[]" value=""></td>
</tr>
<tr>
<td>Plik 2:</td> <td><input type="file" size="40" name="pliki[]" value=""></td>
</tr>
<tr>
<td>Plik 3:</td> <td><input type="file" size="40" name="pliki[]" value=""></td>
</tr>
</table>
<input type="submit" name="Wyślij" value="Wyslij"></form>
</div><hr />
<h3>Pliki na serwerze:</h3>
<?php
// przeglądanie plików znajdujących się na serwerze
while($plik = $folder->read())
{
if (($plik != '.') && ($plik != '..'))
{
$pliki[$nazwa["basename"]] = $nazwa["extension"];
$dodaj = true;
for($i = 0; $i < count($typ); $i++) if ($typ[$i] == $nazwa["extension"]) $dodaj = false;
if ($dodaj == true)
$typ[] = $nazwa["extension"];
}
}
$folder->close();
for($i = 0; $i < count($typ); $i++) {
echo "<ul><b>".$typ[$i]."</b>";
foreach($pliki as $klucz => $wartosc)
if ($wartosc == $typ[$i])
echo "<li><a href=przegladarka.php?id=".$klucz.">" .$klucz. "</a></li>";
}
?>
</body>
</html>
Oczywiście ta implementacja jest wielką podstawą i nie posiada zabezpieczeń. Jednak na tym etapie nie mam się na tym skupiać.
Problem polega na tym, że część plików kopiuje się do odpowiedniego katalogu a część nie (przy czym nie wyskakuje żaden komunikat). To samo dzieje się przy pobieraniu pliku (pobieranie poprzez kliknięcie na link pliku) - część wgranych plików można pobrać - pozostałe nie reagują. Gdzie jest błąd?
Proszę o pomoc.