Foto upload functie (dmv zip)
Met dit script kan je meerdere foto's (of andere bestanden) tegelijk uploaden. Je moet eerst alle foto's in een .zip bestand zetten! De opbouw van de mappen is zo: >$fotomap (fotoalbum/) >Jaar $jaarmap (Jaar 2008/) >$mapmap (een gebeurtenis/) >De foto's De unzip functie heb ik van php.net. De rest is zelf gemaakt :) Kritiek mag, maar wel met goede onderbouwing, want daar heb ik wat aan. Positieve reacties zijn natuurlijk van harte welkom. :D Veel plezier er mee. //update (30-04-08): * Het jaartal wordt nu gecontroleerd of het wel een geldig jaartal is * De mappen die er al zijn worden weergegeven //update (11-05-08): * Na het uitpakken wordt er gekeken of de bestanden wel plaatjes zijn, zo niet, worden ze verwijderd * Wat comments bij de Unzip functie toegevoegd * Nog wat kleine dingen //update : * Er ging iets fout als er een map in de zip stond, dat is gefixed met end() //update (12-05-08): * Beveiliging was nog niet goed, weer aangepast * De extentie eerst lowercase maken, dan controleren * Hij maakt de map $fotomap nu als die er nog niet was //update (13-05-08): * Extentie check verbeterd: Hij kijkt nu naar de mime types
<?php
$fotomap = "fotoalbum"; //map waar de foto's van het fotoalbum komen
$zipnaam = "fotozip"; //tijdelijke naam van het zipbestand op de server
$jaarnu = date('Y'); //vaststellen welk jaar het nu is
$scriptnaam = $_SERVER['PHP_SELF']; //hoe het scritp heet voor het verzenden van het formulier
//de map $fotomap maken als die er nog niet is.
if (!is_dir($fotomap)) {
mkdir($fotomap, 0777, True);
echo "De map $fotomap is gemaakt omdat die er nog niet was";
}
//ZIP-Unpack functie maken
function unpackZip($map,$zipnaam) {
//Het zipbestand openen
if ($zip = zip_open($map.$zipnaam.".zip"))
{
if ($zip) //als het openen is gelukt:
{
while ($zip_entry = zip_read($zip)) //zolang er nog wat in de zip zit, bekijk het
{
if (zip_entry_open($zip,$zip_entry,"r")) //open de map
{
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
$map_name = dirname(zip_entry_name($zip_entry)); //de mapnaam van elk bestandje
//Het puntje ( . ) er uit filteren
if ($map_name != ".")
{ //nu zijn alle mappen nog over behalve het puntje
foreach ( explode("/",$map_name) as $k)
{
$map_op = $map . $k;
if (is_file($map_op)) unlink($map_op);
if (!is_dir($map_op)) mkdir($map_op);
$map_op = $map_op . "/" ;
}
}
$zipentry = zip_entry_name($zip_entry); //de mappen+bestandsnamen
$maptot = $map.$zipentry;
if(!is_dir($maptot)) {
$fp=fopen($maptot,"w");
}
fwrite($fp,$buf);
/*-----------------------------------------------------
| Bestanden filteren |
------------------------------------------------------*/
$extensie = mime_content_type($maptot);
$inmap = str_replace($map,"", $maptot);
if (is_file($maptot))
{
if($extensie == 'image/jpeg' || $extensie == 'image/gif' || $extensie == 'image/png')
{
}else{
echo "<br />Delete <b>".$inmap."</b>. Bestand is geen geldig of ondersteund bestand!";
unlink($maptot);
}
}
/*---------------------------------------------------*/
zip_entry_close($zip_entry);
}else{
return false;
}
}
zip_close($zip); //zip sluiten
}else{
return false;
}
return true;
}
}
if (isset($_POST['submit'])) //als er op de submit knop is gedrukt, ga verder
{
$filename = $_FILES['zipbestand']['name']; //de bestandsnaam van het geuploade bestand
$extentie = explode(".", "$filename"); //haal de extentie uit de filenaam
$extentie = strtolower($extentie[1]); //maak de extentie lowercase
$uploadname = $zipnaam.".zip"; //zo gaat het zipbestand heten na de upload
$jaar = $_POST['jaar'];
$mapjaar = "Jaar ".$jaar;
$mapmap = $_POST['map'];
$map = "".$fotomap."/".$mapjaar."/".$mapmap."/"; //de map waar de foto's in komen
if (!empty($mapmap)) {
//kijken of $jaar wel een getal is en of jaar misschien in de toekomst gegeven is.
if (is_numeric($jaar) and ($jaar <= $jaarnu) and ($jaar > 1900))
{
//als de extentie zip is ga verder, anders zeg dat je alleen .zip kan uploaden
if ($extentie == "zip")
{
//Wat als $mapjaar nog niet bestaat?
if (file_exists($fotomap."/".$mapjaar) == FALSE)
{
//Dan maak je $mapjaar toch gewoon?!
echo "De map <b>$mapjaar</b> bestaat nog niet. Hij wordt nu gemaakt";
if (mkdir($fotomap."/".$mapjaar, 0777, True)) {
$maakmapjaar = "gelukt";
}
}else{
//als de map al wel bestond, dan is het ook dus ook gelukt
echo "De map <b>$mapjaar</b> bestaat al";
$maakmapjaar = "gelukt";
}
if ($maakmapjaar == "gelukt") //als de map dan eindelijk bestaat, ga dan verder. Ander zeg dat het is mislukt
{
//als het maken van de jaarmap is gelukt, kijk dan of de map $mapmap al bestaat. Als het is gelukt, zeg het en ga verder, anders zeg dat het is mislukt.
if (file_exists($fotomap."/".$mapjaar."/".$mapmap) == FALSE)
{
echo "<br />De map <b>$mapmap</b> bestaat nog niet. Hij wordt nu gemaakt";
if (mkdir($fotomap."/".$mapjaar."/".$mapmap)) {
$maakmapmap = "gelukt";
}
}else{
echo "<br />De map <b>$mapmap</b> bestaat al";
$maakmapmap = "gelukt";
}
if ($maakmapmap == "gelukt")
{
//het maken van de map $mapmap is gelukt (of hij bestond al), dus verplaats nu het bestand van de temporary folder naar de map $map
if (is_uploaded_file($_FILES['zipbestand']['tmp_name']))
{
move_uploaded_file($_FILES['zipbestand']['tmp_name'], "$map" . $uploadname);
echo "<br />Het bestand <b>$filename</b> is geupload onder de naam <b>$uploadname</b>";
$unpack = unpackZip ($map,$zipnaam); //het zipbestand uitpakken
if ($unpack == TRUE) { //als het uitpakken is gelukt.....
echo $message;
echo "<br />De foto's zijn uitgepakt en staan nu in het fotoalbum!";
}else{
echo "<br />Het uitpakken is mislukt!";
}
if (unlink("".$map."".$zipnaam.".zip")) { echo "<br />Het zip-bestand is gedelete!"; } //verwijder het zip bestand, want die heb je niet meer nodig :)
}else{
echo "<br />Er is iets mis gegaan met het verplaatsen";
}
}else{
echo "<br />Het maken van de map $mapmap is mislukt!";
}
}else{
echo "<br />Het maken van de jaarmap $mapjaar is mislukt!";
}
}else{
echo "Je hebt geen .Zip bestand opgegeven! Je kan alleen .Zip bestanden uploaden!";
}
}else{
echo "\"$jaar\" is geen geldig jaartal! Je moet bij \"jaar\" wel een jaartal invullen!";
}
}else{
echo "Je moet bij \"Map\" wel een gebeurtenis invullen!";
}
}
//formulier laten zien
echo "<form method=\"post\" action=\"".$scriptnaam."\" enctype=\"multipart/form-data\">
<p style=\"text-align: left;\">Jaar:
<input type=\"text\" name=\"jaar\" maxlenght=\"4\" value=\"".$jaarnu."\"/><br />
Map:
<input type=\"text\" name=\"map\" /> <small>(De gebeurtenis)</small><br />
Zip-bestand: <small>(Mappen in het .zip bestand worden submappen!)</small><br />
<input type=\"file\" name=\"zipbestand\" size=\"40\" /> <br />
<input type=\"submit\" value=\"Submit\" name=\"submit\"/>
</p>
</form>";
echo "<p>Deze mappen staan nu in het fotoalbum:<br />";
$baseDir = $_SERVER['DOCUMENT_ROOT']."/".$fotomap."/";
$dir = scandir($baseDir);
$dir = array_flip($dir);
unset($dir['.'], $dir['..']);
$dir = array_flip($dir);
for ($m=2; $dir[$m]; $m++) {
//if(is_dir($dir)) {
echo "<br />> ".$dir[$m]."<br />";
$dir2 = scandir($baseDir."".$dir[$m]."/");
$dir2 = array_flip($dir2);
unset($dir2['.'], $dir2['..']);
$dir2 = array_flip($dir2);
for ($l=2; $dir2[$l]; $l++) {
echo "----> ".$dir2[$l]."<br />";
}
//}
}
echo "</p>";
?>
Reacties
0