Doporučujeme: Snadné sdílení souborů | Levný PHP webhosting | Nejlevnější domény | Italo.cz | Psí Park | Služby pro Váš web | JSP & Java hosting
| Zavřít |
klikni pro zmenšení fotky

Můj blog – až 10 % špičkového kódu navíc!

Správa souborů na disku a PHP

Datum: 28. 6. 2006 17.40 | Autor: Lukáš | 10536× | Kategorie: PHP | Komentáře: 2

Už strašně dlouho řeším následující problém:

Mám doma hudbu seřazenou po složkách podle interpretů, avšak novinky mám v jiné složce, kde mám neskutečný bordel. Jedná se o tisíce složek, které bych si rád už delší domu zařadil mezi ostatní hudbu řazenou dle interpretů. Jelikož jsem ale líný, tak se mi těch pár hodin času stráveného ručním přesouváním obětovat prostě nechce. Je třeba dodat, že každý singl nebo album je v samostatné složce, v jejímž názvu je jméno interpreta od názvu songu odděleno pomlčkou.

Včera v noci, když jsem zrovna chvíli nespal, jelikož mě tento problém opravdu velmi tížil, mě napadlo, že, jelikož neumím C#, bych si mohl napsat script v PHP, který by mi songy řadil - a to jsem taky udělal.

DocumentRoot jsem si v apache nastavil na disk, se kterým jsem chtěl pracovat, v tomto případě tedy DocumentRoot "E:". Nyní už jen stačilo napsat triviální php script, kterým vypíšu jednotlivé složky v určené složce, v nich pak soubory a nakonec to celé překopíruji jinam.

 1 <?

 2
/*Nejdříve je třeba nadefinovat fci slozka(), která z divných názvů alb vytáhne interprety:*/
 3
 4
function slozka($vstup){
 5
 6
$interpret=explode("-"$vstup);
 7
$interpret=$interpret[0];
 8
$interpret=str_replace("_"" "$interpret);
 9
$interpret=trim($interpret);
10
11 return 
$interpret;
12
13 }
14
15
16
/*Pak už načteme všechny složky v adresáři <em>nejakaslozka</em>:*/
17
18
$root="nejakaslozka";
19
20
$adresare=array();
21 if (
$adresar=opendir('./' $root '/')) {
22    while (
$adr readdir($adresar))
23    {
24       
$adresare[count($adresare)] = $adr;
25    }
26    
closedir($adresar);
27    
sort($adresare);
28 }
29
30
31
/*Vypíšeme jejich názvy, a dále, pokud ve složce "E:/Hudba" neexistuje složka s názvem aktuálního interpreta, vytvoříme ji. To samé uděláme, pokud ve složce interpreta již není uloženo aktuální album:*/
32
33
while (list($key$slozka) = each($adresare))
34 {
35       if (
$slozka != "." && $slozka != "..")
36       {
37          echo 
"<b><a href=\"/" $root "/" $slozka "/\">$slozka</a></b> - " slozka($slozka) . "<br>\n";
38
39
40 if(!
file_exists("E:/Hudba/" slozka($slozka))){
41
42 if(
mkdir("E:/Hudba/" slozka($slozka), 0777)){
43 echo 
"slozka interpreta vytvorena<br>";
44 }
45
46 }
47
48
49 if(!
file_exists("E:/Hudba/" slozka($slozka) . "/" $slozka)){
50
51 if(
mkdir("E:/Hudba/" slozka($slozka) . "/" $slozka0777)){
52 echo 
"slozka pro CD vytvorena<br>";
53 }
54
55 }
56
57
58
/*Nyní už jen stačí z každé složky s albem načíst soubory a zkopírovat je do nově vytvořeného adresáře "E:/Hudba/interpret/nazev_cd":*/
59
60
$soubory=array();
61 if (
$adresar1=opendir('./' $root '/' $slozka '/')) {
62    while (
$soubor readdir($adresar1))
63    {
64       
$soubory[count($soubory)] = $soubor;
65    }
66    
closedir($adresar1);
67    
sort($soubory);
68 }
69
70
reset($soubory);
71 while (list(
$key$file) = each($soubory))
72 {
73    if (
$file != "." && $file != "..")
74    {
75          echo 
" - <a href=\"/" $root "/" $slozka "/" $file "\">$file</a>\n";
76
77
78
79 if(!
file_exists("E:/Hudba/" slozka($slozka) . "/" $slozka "/" $file)){
80
81 if(
copy("E:/" $root "/" $slozka "/" $file"E:/Hudba/" slozka($slozka) . "/" $slozka "/" $file)){
82 echo 
" - soubor zkopirovan";
83 }
84
85 }
86
87 echo 
"<br>";
88
89    }
90 }
91
92 echo 
"<br><br>";
93
94    }
95 }
96
?>

A to je vše. Při spuštění souboru se vám vypíší obsahy složek zároveň s informacemi o úspěšném kopírování (pokud je neúspěšné, nezobrazí se nic).
Všímavější ještě mohou namítnout, že bych měl u výpisu složek kontrolovat fcí is_dir, zda se opravdu jedná o složku - normálně bych to dělal, ale na windows mi is_dir z neznámého důvodu nefunguje (pokud víte proč, napište mi to třeba do komentářů).

Tak tady vidíte, jak to jde taky udělat. Třeba to někomu pomůže ;).


Podobné články:
Hromadné nahrávání souborů na megaupload.cz
Podpora disků větší­ch než 128 GB ve Win 2000/XP
Převod disku z FAT32 do NTFS


Komentáře:

  1. martin19. 2. 2008 8.09

    is_dir potrebuje celou cestu k polozce, kterou overujes



    odpovědět
  2. Daniel21. 6. 2017 10.13

    Such a very useful article. Very interesting to read this article.I would like to thank you for the efforts you had made for writing this awesome article.



    odpovědět

Přidat nový komentář:




Ochrana proti spamu. Napište prosím číslici pět: