Programowanie w języku PHP

UnZIP


Strona w budowie
Ktoś pracuje nad tą stroną, jej zawartość może się wkrótce zmienić. Prosimy o cierpliwość!



O skrypcie


Skrypt ten ma znacznie ułatwić WebMasterom wgrywanie dużych serwisów takich jak fora phpBB2 by przemo, czy może PHP-Fusion, a może nawet Moodle. UnZIP potrafi: Rozpakować archiwum ZIP, wylistować wszystkie pliki w archiwum, podać podstawowe informacje o nim. Ma także prosty Uploader, do małych plików, takich jak zarchiwizowane style do for dyskusyjnych.

Użycie skryptu


Jeśli chcesz wypakować dowolne archiwum ZIP, wypełnij następujące pola:
Nazwa archiwum: Tutaj wpisz nazwę archiwum do rozpakowania.
Folder docelowy: Tu należy wpisać folder, do którego mają zostać wypakowane pliki. Jeśli mają zostać umieszczone w folderze forum, to wpisz forum/. Ścieżka nie musi być wcześniej utworzona. Jeśli chcesz wypakować pliki do folderu, w którym uruchomiono skrypt wpisz ./ [Kropka i ukośnik].
Przekieruj do: To pole jest opcjonalne, jeśli je wypełnisz to odeśle cię do wybranego miejsca, po poprawnym rozpakowaniu.

Jeśli chcesz zobaczyć informacje o archiwum to kliknij na przycisk MakeDump, wpisz nazwę archiwum w formularzu, który się pojawi i ponownie kliknij MakeDump.

Jeśli masz małe archiwum do rozpakowania, możesz kliknąć Uploaduj Plik, wybrać plik do wrzucenia i ponownie kliknąć Uploaduj Plik, po pomyślnym wrzuceniu, zostanie on automatycznie wpisany do formularza.

Source


Tutaj znajduje się źródło mojego skryptu:
<?
 
/*
 
Skrypt wykorzystujesz na własne ryzyko!
Copyright by Demonical Monk
GG: 8669817
EMail: demonicalmonk[at]o2.pl
 
*/
 
function microtime_float2()
{
        list($usec2, $sec2) = explode(" ", microtime());
        return ((float)$usec2 + (float)$sec2);
}
 
$time_start2 = microtime_float2();
 
?>
 
<HTML>
<HEAD>
        <style type="text/css">
        <!--
        body {
        background-color: #EFEFEF;
        scrollbar-face-color: #EFEFEF;
        scrollbar-highlight-color: #FFFFFF;
        scrollbar-shadow-color: #DEE3E7;
        scrollbar-3dlight-color: #D1D7DC;
        scrollbar-arrow-color: #006699;
        scrollbar-track-color: #EFEFEF;
        scrollbar-darkshadow-color: #98AAB1;
        }
 
        .bodyline { background-color: #FFFFFF; border: 1px #98AAB1 solid; }
        font,th,td,p { font-family: Verdana, Arial, Helvetica, sans-serif }
        p, td                { font-size : 12; color : #000000; }
 
        hr        { height: 0px; border: solid #D1D7DC 0px; border-top-width: 1px;}
        h1,h2,h3,h4                { font-family: Arial, Helvetica, sans-serif; font-size : 19px; font-weight : bold; text-decoration : none; line-height : 100%; color : #000000;}
 
        -->
        </style>
 
</HEAD>
<BODY>
<?
 
set_time_limit(0);
 
function retry() {
echo(' <input type="button" style="font-family: Arial, Helvetica; font-size: 9px; color: #0033CC; font-weight: bold;" VALUE="Retry" onClick="parent.location.');
echo("href='?unpack=1'"); echo('">');
}
 
function dumpform() {
$title = '<b><font color="black" style="font-family: Arial; font-size: 12px;">';
$title2 = '</font></b>';
 
$green = '<b><font color="#009900" style="font-family: Arial; font-size: 11px;">';
$green2 = '</font></b>';
 
$blue = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 11px;">';
$blue2 = '</font></b>';
 
$red = '<b><font color="red" style="font-family: Arial, Helvetica; font-size: 11px;">';
$red2 = '</font></b>';
 
echo("<script>function subForm() {document.getElementById('buttonOK').disabled = true; document.getElementById('buttonOK').value = 'Czekaj...';}</script>");
echo($title . 'Zbieranie danych' . $title2 . '<br>');
echo('<form action="?dump=2" method="POST">');
echo($blue . 'Nazwa archiwum: ' . $blue2);
echo('<input type="text" style="font-family: Arial, Helvetica; font-size: 11px; color: #0033CC; font-weight: bold;" name="file">' . $red . ' (Wymagane)' . $red . '<br>');
echo('<input type="submit" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" id="buttonOK" onClick="subForm()" value="MakeDump">');
echo('</form>');
}
 
function dump() {
$title = '<b><font color="black" style="font-family: Arial; font-size: 12px;">';
$title2 = '</font></b>';
 
$green = '<b><font color="#009900" style="font-family: Arial; font-size: 11px;">';
$green2 = '</font></b>';
 
$blue = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 11px;">';
$blue2 = '</font></b>';
 
$red = '<b><font color="red" style="font-family: Arial, Helvetica; font-size: 11px;">';
$red2 = '</font></b>';
 
echo($title . 'Wykaz danych' . $title2 . '<br>');
 
$za = new ZipArchive();
 
@$za->open($_POST["file"]);
echo $blue . "Nazwa archiwum: " . $za->filename . "<br>";
echo "Pliki w archiwum: " . $za->numFiles . "<br>";
echo "Status: " . $za->status  . "<br>";
echo "StatusSystemowy: " . $za->statusSys . "<br>";
echo "Komentarz: " . $za->comment . "<br>" . $blue2;
 
for ($i=0; $i<$za->numFiles;$i++) {
    $gfx = '<img src="http://img178.imageshack.us/img178/8716/textnj0.gif">';
    $dump = $za->statIndex($i);
    echo($gfx . $green . $dump['name'] . $green2);
    echo('<BR>');
}
}
 
function printform($p_nazwa_zm) {
$title = '<b><font color="black" style="font-family: Arial; font-size: 12px;">';
$title2 = '</font></b>';
 
$green = '<b><font color="#009900" style="font-family: Arial; font-size: 11px;">';
$green2 = '</font></b>';
 
$blue = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 11px;">';
$blue2 = '</font></b>';
 
$red = '<b><font color="red" style="font-family: Arial, Helvetica; font-size: 11px;">';
$red2 = '</font></b>';
 
echo("<script>function subForm() {document.getElementById('buttonOK').disabled = true; document.getElementById('buttonOK').value = 'Czekaj...';}</script>");
echo('<br><br>' . $title . 'Zbieranie danych' . $title2 . '<br>');
if (!$_GET["skip"]) {
echo('<form action="?unpack=1" method="POST">');} else {
echo('<form action="?skip=1" method="POST">');}
echo($blue . 'Nazwa archiwum: ' . $blue2);
if (!$p_nazwa_zm){
echo('<input type="text" style="font-family: Arial, Helvetica; font-size: 11px; color: #0033CC; font-weight: bold;" name="file" value="' . $_POST["file"] . '">' . $red . ' (Wymagane)' . $red2 . '<br>');}
if ($p_nazwa_zm){
echo('<input type="text" style="font-family: Arial, Helvetica; font-size: 11px; color: #0033CC; font-weight: bold;" name="file" value="' . $p_nazwa_zm . '">' . $red . ' (Wymagane)' . $red . '<br>');}
echo($blue . 'Folder docelowy: ' . $blue2 . '<input type="text" style="font-family: Arial, Helvetica; font-size: 11px; color: #0033CC; font-weight: bold;" value="' . $_POST["unPack"] . '" name="unPack">' . $red . ' (Wymagane)' . $red2 . '<br>');
echo($blue . 'Przekieruj do: ' . $blue2 . '<input type="text" style="font-family: Arial, Helvetica; font-size: 11px; color: #0033CC; font-weight: bold;" name="redirect">' . $red . ' (Opcjonalne)' . $red . '<br>');
echo('<input type="submit" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" id="buttonOK" onClick="subForm()" value="Rozpakuj">');
echo('<input type="button" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" VALUE="Uploaduj plik" onClick="parent.location.');
echo("href='?upload=1'");
echo('">');
echo('<input type="button" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" VALUE="MakeDump" onClick="parent.location.');
echo("href='?dump=1'");
echo('"><br></form>');
}
 
function printupload() {
$title = '<b><font color="black" style="font-family: Arial; font-size: 12px;">';
$title2 = '</font></b>';
 
$green = '<b><font color="#009900" style="font-family: Arial; font-size: 11px;">';
$green2 = '</font></b>';
 
$blue = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 11px;">';
$blue2 = '</font></b>';
 
$red = '<b><font color="red" style="font-family: Arial, Helvetica; font-size: 11px;">';
$red2 = '</font></b>';
 
echo("<script>function subForm() {document.getElementById('buttonADD').disabled = true; document.getElementById('buttonADD').value = 'Czekaj...';}</script>");
echo($title . 'Zbieranie danych' . $title2 . '<br>');
echo('<form action="?upload=2" method="post" enctype="multipart/form-data">');
echo($blue . 'Wybierz plik do wrzucenia:' . $blue2 . '<br><input name="plik" type="file" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" />');
echo('<input value="Uploaduj plik" id="buttonADD" onClick="javascript:subForm();" type="submit" style="font-family: Arial, Helvetica; font-size: 12px; color: #0033CC; font-weight: bold;" /></form>');
exit;
}
 
function charsUsed($file)
{
        if ( @file_exists($file) )
        {
                $fd = @fopen($file, 'rb');
                $fileContents = @fread($fd, @filesize($file));
                @fclose($fd);
                return strlen(str_replace(array(" ","\t","\n","\r"), '', $fileContents));
        }
        else
        {
                return false;
        }
}
 
$title = '<b><font color="black" style="font-family: Arial; font-size: 12px;">';
$title2 = '</font></b>';
 
$green = '<b><font color="#009900" style="font-family: Arial; font-size: 11px;">';
$green2 = '</font></b>';
 
$blue = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 11px;">';
$blue2 = '</font></b>';
 
$red = '<b><font color="red" style="font-family: Arial, Helvetica; font-size: 11px;">';
$red2 = '</font></b>';
 
$copyright = '<b><font color="#0033CC" style="font-family: Arial, Helvetica; font-size: 13px;">';
$copyright2 = '</font></b>';
 
echo($copyright . '<i>UnZIP by Demonical Monk</i>' . $copyright2 . '<br>');
 
echo($title . 'Zabezpieczenia' . $title2 . '<br>');
 
echo($blue . 'Ustawianie CHMODa... ' . $blue2);
$chmoder = @chmod("UnZIP.php", 0755);
if ($chmoder == TRUE) {
echo($green . 'OK<br>' . $green2);
} else {
echo($red . 'ERROR' . $red2);
retry(); exit;
}
 
if($_GET["dump"] == '1') {
dumpform(); exit;}
 
if($_GET["dump"] == '2') {
dump(); exit;}
 
if($_GET["upload"] == '1') {
printupload();}
 
if($_GET["upload"] == '2') {
echo($title . 'Wrzucanie pliku' . $title2 . '<br>');
$p_pojemnosc=$_FILES['plik']['size'];
$p_typ=$_FILES['plik']['type'];
$p_nazwa=$_FILES['plik']['name'];
$p_smiec=$_FILES['plik']['tmp_name'];
$p_nazwa_zm = $p_nazwa;
$folder = '';
if ($p_pojemnosc <= 0) {
echo($red . 'ERROR! Plik jest pusty lub ma za duży rozmiar.' . $red2 . '<br><br>');
printupload();
exit;}
 
if (file_exists($folder.$p_nazwa_zm)){
echo($red . 'ERROR! Plik o takiej nazwie jest już na serwerze.' . $red2);
exit;}
 
if(!@move_uploaded_file($p_smiec, $folder.$p_nazwa_zm)) {
echo($red . 'ERROR! Przenoszenie pliku zakończone fiaskiem.' . $red2);
exit;}
echo($green . 'Przesyłanie zakończone!<br>Nazwa pliku: ' . $p_nazwa_zm . $green2);
printform($p_nazwa_zm);
exit;}
 
echo($title . 'Przygotowywanie' . $title2 . '<br>');
echo($blue . 'Sprawdzanie wersji PHP... ' . $blue2);
if (phpversion() < '5.2.0') {echo($red . 'ERROR' . $red2); exit;}
echo($green . 'OK' . $green2 . '<br>');
 
echo($blue . 'Sprawdzanie zmiennych... ' . $blue2);
if (!$_POST["file"]) {echo($red . 'ERROR' . $red2); printform(''); exit;}
if (!$_POST["unPack"]) {echo($red . 'ERROR' . $red2); printform(''); exit;}
echo($green . 'OK' . $green2 . '<br>');
 
echo($blue . 'Sprawdzanie plikow... ' . $blue2);
if (!File_Exists($_POST["file"])) {echo($red . 'ERROR' . $red2); printform(''); exit;}
echo($green . 'OK' . $green2 .'<br>');
 
echo('<br>' . $title . 'Instalacja' . $title2 . '<br>');
echo($blue . 'Inicjowanie zlib... ' . $blue2);
$zip = new ZipArchive();
echo($green . 'OK' . $green2 . '<br>');
 
echo($blue . 'Otwieranie archiwum... ' . $blue2);
if (@$zip->open($_POST["file"]) == TRUE) {
echo($green . 'OK' . $green2 . '<br>');
} else {echo($red . 'ERROR' . $red2); exit;}
 
echo($blue . 'Wypakowywanie plikow... ' . $blue2);
if (@$zip->extractTo($_POST["unPack"]) == TRUE) {
echo($green . 'OK' . $green2 . '<br>');
} else {echo($red . 'ERROR' . $red2); exit;}
 
echo($blue . 'Zamykanie archiwum... ' . $blue2);
if (@$zip->close() == TRUE) {
echo($green . 'OK' . $green2 . '<br>');}
else {echo($red . 'ERROR' . $red2); exit;}
 
if($_POST["redirect"]) {
echo('<META HTTP-EQUIV=Refresh CONTENT="0; URL=' . $_POST["redirect"] . '">');}
 
$time_end2 = microtime_float2();
$generated_time2 = round(($time_end2 - $time_start2), 2);
echo('<br>' . $blue . 'Operacja wykonana w ' . $generated_time2 . ' s.' . $blue2);
 
?>
</BODY>
</HTML>


UnZIP Smart


Jeśli przedstawione powyżej rozwiązanie ci nie odpowiada, można jeszcze użyć funkcji UnZIP() która jest zdefiniowana poniżej:

function UnZIP ($file, $path) {
$zip = new ZipArchive();
$result = @$zip->open($file);
if ($result == FALSE) {
return('ErOpen');
exit;
}
$result = @$zip->extractTo($path);
if ($result == FALSE) {
return('ErExtract');
exit;
}
$result = @$zip->close();
if ($result == FALSE) {
return('ErClose');
exit;
}
return('True');
}


Parametry:
$file - archiwum do wypakowania
$path - ścieżka do folderu docelowego (nie musi istnieć)

Funkcja zwraca TRUE w przypadku pomyślnego wykonania zadania. ErOpen jeśli wystąpi błąd otwierania. ErExtract jeśli nie można wypakować archiwum. ErClose jeśli nie można zamknąć archiwum. Skrypt wymaga klasy ZipArchive dołączonej standardowo do PHP 5.2.5.