Avatar billede krohn Praktikant
27. marts 2012 - 09:55 Der er 7 kommentarer og
1 løsning

Scan mappe med zip filer til MySql

Jeg har en mappe med en del zip filer (ca 1000).
Jeg ønsker via php at skanne dem og få info gemt i mysql. 
Jeg ville også gerne genere link til download af zip filen også gemt i min DB. 
Mener jeg skal have flg. i min DB >> "zip_files"

Id
Name ( uden extention)
Size ( i MB)
Download_link ( path til at downloade filen med)

Har søgt Google, og har testet en del scripts. Men kan ikke få det til. 
Det skal kun bruges til dette, det er meningen at jeg her efter uploader kommende zip filer via et admin script. 
Avatar billede moddi100 Seniormester
27. marts 2012 - 10:37 #1
At gemme det i databasen er jo bare en simpel sql forespørgsel. Information omkring filerne finder du ud fra php's readdir() og filesize() .

<?php
if ($handle = opendir('.')) {
    while (false !== ($file = readdir($handle))) {
        if (strtolower(substr($file, -4)) == ".zip") {
            $size = filesize($file);
            echo "$file med størrelsen " . $size . " bytes<br />";
        }
    }
    closedir($handle);
}
?>
Avatar billede Slettet bruger
27. marts 2012 - 19:04 #2
Er der nogen særlig grund til at de skal ind i MySql-databasen ?
- Navn, størrelse og link kan læses/vises umiddelbart (med moddi100's) kode.

Vil du gemme navnene på filerne inden i zip'erne, eller søge ?
Avatar billede krohn Praktikant
27. marts 2012 - 19:35 #3
moddi100:
Jeg får fejl på dit script.
-----
$dir = "nds";
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if (strtolower(substr($file, -4)) == ".zip") {
            $size = filesize($file);
            echo $file." ". $size . " bytes<br />";
        }
    }
    closedir($handle);
}
----
Giver følgende fejl:
Warning: filesize() [function.filesize]: stat failed for

Hvis jeg prøver at tage bare en fil direkte med flg.:
------
$file = "files/File name no 1.zip";

$size = filesize($file);
            echo $file." ". $size . " bytes<br />";
-------
Virker det fint.
??
T4NK32:
Om det er en særlig grund, eller om det kan gøres anderledes / smartere skal jeg ikke bedømme (er rimelig ny i dette), men grunden er at jeg har haft lidt flere kolonner i min tabel (skrev dem bare ikke da jeg ville prøve at holde det til min udfordring.
Men den tabel jeg har brugt før ser sådan her ud:
------
CREATE TABLE IF NOT EXISTS `files` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_danish_ci NOT NULL,
  `description` text COLLATE utf8_danish_ci NOT NULL,
  `extern_description_link` varchar(100) COLLATE utf8_danish_ci NOT NULL DEFAULT 'no-link.php',
  `size` varchar(100) COLLATE utf8_danish_ci NOT NULL,
  `download_count` int(10) NOT NULL DEFAULT '0',
  `category` varchar(32) COLLATE utf8_danish_ci DEFAULT NULL,
  `download_link` varchar(100) COLLATE utf8_danish_ci NOT NULL,
  `photo` varchar(100) COLLATE utf8_danish_ci NOT NULL DEFAULT 'images/noimage.png',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_danish_ci;
-------
Men da jeg jo ikke får description, extern_description_link, download_count, category, og photo ved en folder scanning undlod jeg at tage dem med i mit spørgsmål.

Har beskrivelser, foto, ekstern link, og kategori klar, og når en fil hentes opdateres download count.

Det jeg mangler er en måde at få de resterne oplysninger om filerne.
Men er meget åben for forslag, "irettesættelser", og små slag over fingerne, er som skrevet kun en newbie i php, og MySql.
Avatar billede inteeeL Nybegynder
27. marts 2012 - 19:57 #4
Mht. den fejl, du får - det skyldes at du ikke skriver den fulde sti, altså at filen ligger i $dir. Prøv at ændre $size til følgende:
$size = filesize($dir.'/'.$file);
Avatar billede krohn Praktikant
27. marts 2012 - 20:18 #5
Super det virkede.
Hvodan fjerner jeg ".zip" hvis jeg kun ønsker fil navnet?
Avatar billede moddi100 Seniormester
27. marts 2012 - 20:29 #6
Det gør du ved at bruge funktionen substr:
$navn = substr($file, 0, -4)
Avatar billede krohn Praktikant
27. marts 2012 - 21:18 #7
Super... Takker.
Da jeg har de resterne oplysninger i et excel ark, har jeg skrevet det så det lige er til at kopier til et csv (ved godt jeg kan få php til at generere det, men da det kun skal bruges max et par gange var det nemmest for mig..
Smid et svar..
Lægger koden her, så er den der hvis andre "falder over dette spørgsmål.

-----------Start på php kode--
$dir = "sti/til/mappen/med/filer";
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        if (strtolower(substr($file, -4)) == ".zip") {
            $size = filesize($dir."/".$file);
            $file_mb = round(($size / 1048576), 2);// Giver størelsen i MB
          $navn = substr($file, 0, -4);
            echo $navn.";". $file_mb .";".$dir."/".$file."<br />";
        }
    }
    closedir($handle);
}
-------Slut på php kode--------
Avatar billede moddi100 Seniormester
27. marts 2012 - 21:31 #8
Svar!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester