Zistenie velkosti suboru

V tejto téme sa nachádzajú snippety (rozšírenia) pre Etomite.

Moderátor: Moderators

Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Zistenie velkosti suboru

Príspevok od používateľa Spade »

Zdravim.

Robim snippet, ktory pracuje na velmi jednoduchom principe, zapisete:

Kód: Vybrať všetko

[[Download?subor=program.exe]]
... a zacne sa stahovat subor v adrese "www.nieco.sk/download/program.exe".

Snippet vyhodi tlacidlo s textom "Download" a pokial nan kliknete, zacne sa stahovanie. Ide o to, ze by som namiesto textu "Download" chcel mat "Download [500 KB]" ... teda vedla toho aj prislusnu velkost suboru.

Dokazal by to niekto?

A este by som sa chcel spytat, ze v CSS styloch je moznost input:hover - tato udalost nastava vtedy, ak uzivatel prejde mysou ponad input. Je mozne toto spravit aj pri kliknuti na objekt? Teda nieco ako input:click?

Vopred vdaka za pomoc.
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

na zjisteni a zobrazeni velikosti souboru muzes pouzit treba toto:

Kód: Vybrať všetko

$size = round((filesize($file)/1024),1)." kB";
pricemz:
$size - vysledna promena, kterou umistis tam, kde budes chtit zobrazit tu velikost;
round - funkce, ktera zaokrouhli velikost souboru, jednicka znaci jedno cislo za desetinou carkou;
filesize - funkce, ktera zjisti velikost souboru, jehoz cesta je v $file, /1024 znamena, ze se to deli, aby vysledek byl v kB;
$file - absolutni cesta filesystemu k souboru, kteryho chces zjistit velikost - takze treba: /home/www/example.com/download/soubor.pdf...

to je cely
takze napises treba takhle:

Kód: Vybrať všetko

Download [$size]
vysledek bude Download [553,3 kB]

jak to muze vypadat mam trebas zde
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Príspevok od používateľa Spade »

Vyborne, vdaka!
Vies, zacinam s PHP a CSS a tak sa snazim nejako dostat do syntaxe ... zatial sa snazim pochopit najprimitivnejsie veci ako su napr. vyhodit textovy retazec. Ako ale vidim, v php sa nerozlisuje typ premennej ako napr. v pascale (integer, string ...), takze v tomto smere sa mi to zda jednoduchsie a prehladnejsie (netreba nic konvertovat).

Trosku este nerozumiem tomu, ako sa spaja viac retazcov dohromady - myslim si, ze to je bodkou:

Kód: Vybrať všetko

'(' . $premenna . ')'
... a toto by malo vyhodit napr.:

Kód: Vybrať všetko

(nazdar)
... v pascale to robim asi takto:

Kód: Vybrať všetko

var
  a, b: string;
begin
  b := 'nazdar';
  a := '(' + b + ')';
end;
Neviem ci je to spravne, ale funguje to :lol:
Kazdopadne tento postup, ktory si napisal je spravny a dal by sa zlepsit - napr. by sa mohlo automaticky zistit ci je subor vacsi ako jeden megabajt a potom by sa jednotky zobrazovali prave v megabajtoch. Ale to je uz vyzva pre mna, tebe velmi dakujem za pohotovu odpoved :)
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

jak si to napsal je spravne...

jo samozrejme, ze se to da zlepsit... ja sem ti napsal to nejjednodussi co me napadlo, kdyz sem cet tvoji otazku... nejsem z tech co napisou hned postup na kompletni reseni, ty ses ptal, tak to taky musis vyresit, ja te jenom muzu nakopnout [bez obrazne ;-) ] - sem rad ze si tohle pochopil a beres to jako vyzvu... mnoho zdaru :-)
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Príspevok od používateľa Spade »

Takze som sa aspon naucil pouzivat podmienky :lol:

Kód: Vybrať všetko

$tlacidlo = "Download";
$adresar = "download/";
$desatina = 2;

$velkost = round((filesize($adresar . $dir)/1024),$desatina);

if ($velkost >= 1024) 
$zapis = round(($velkost / 1024), $desatina)." MB";
else
$zapis = $velkost." kB";

$vysledok = "<div align=\"center\"><form method=\"post\">
<input type=\"button\" class=\"button\" value=\"" . $tlacidlo . ' [' . $zapis . ']' . "\" onclick=\"window.location.href='$adresar$dir'\" /></form></div>";

return $vysledok;
Je to sice troska rozsiahlejsie, ale pre mna je to najlepsie riesenie. Ucel to splna, takze super.

Kód: Vybrať všetko

$adresar - je vlastne adresar, kde su subory na stiahnutie. Teda http://www.spade.eus.sk/download/
$subor - je subor umiestneny v adresari (pre rychlejsi zapis, nic viac)
Jasne, este sa to da spravit na gigabajty, terabajty ... ale aj tak, najblizsich 20 rokov neplanujem nahravat nic na ftp vacsie ako terabajt :)

Inak demo je napriklad tu:
http://www.spade.eus.sk/index.php?id=76
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

dobry, ale nevim jestli je to naschval, ale nic to nestahuje... pouze se mi dostane 404 o nedostecnych pravech pro adresar download/
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Príspevok od používateľa Spade »

Mno chyba bola dost primitivna - trosku som sa v tom vrtal a vylepsoval to este o tlacidlo "Späť", takze som mal blbo premenovanu premennu.

Takze uz to funguje a cely kod je tu (dovolil som si tam dat aj podpis :)

Kód: Vybrať všetko

/*
Snippet: DownloadFile
Authors: dutch, Spade
Version: 0.2 [05.04.2007]
*/

$tlacidlo = "Download";
$spat = "Späť";

/* adresar, kde sa nachadzaju subory */
$adresar = "download/";
/* pocet desatinnych miest - 0,12 */
$desatina = 2;
/* aktivovat tlacidlo Spat? 1-ano; 0-nie */
$povolit = 1;


$velkost = round((filesize($adresar . $subor)/1024),$desatina);

if ($velkost >= 1024) 
$zapis = round(($velkost / 1024), $desatina)." MB";
else
$zapis = $velkost." kB";

if ($povolit == 1)
$vysledok = "<div align=\"center\"><form method=\"post\">
<input type=\"button\" class=\"button\" value=\"" . $spat . "\" onclick=\"window.location.href='javascript:history.back(1)'\" />
<input type=\"button\" class=\"button\" value=\"" . $tlacidlo . ' [' . $zapis . ']' . "\" onclick=\"window.location.href='$adresar$subor'\" />
</form></div>";

if ($povolit == 0)
$vysledok = "<div align=\"center\"><form method=\"post\">
<input type=\"button\" class=\"button\" value=\"" . $tlacidlo . ' [' . $zapis . ']' . "\" onclick=\"window.location.href='$adresar$subor'\" />
</form></div>";

return $vysledok;
Snippet sa pouziva nasledovne:

Kód: Vybrať všetko

[[Download?subor=program.exe]]
Cize staci v snippete nastavit len konkretny adresar, kde su vsetky subory a v mieste, kde ma byt tlacidlo treba uz len napisat subor, ktory sa ma stahovat. Je to velmi primitivny snippet, takze mozno este spravim dalsiu verziu:)

Kazdopadne vdaka dutch-ovi za neskonalu pomoc! Bez neho by tento snippet nevysiel nikdy :wink:

PS:
Demo je tu: http://www.spade.eus.sk/index.php?id=76
Inak to tlacidlo sa riadi podla CSS suboru, takze vzhlad zmenite prave tam.
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

mel bych jenom takovou vec na zamysleni - to tlacitko Zpet vyuziva JS fce history.go() nebo history.back(), coz v nekterych pripadech nemusi bejt dobry, treba zrovna na prikladu tady na foru:
kdyz kliknes na odkaz na demo snippetu, tak tlacitko nevykona nic...

ted je ale treba se zamyslet nad tim, cim to nahradit - moznosti je nekolik:
- vytvorit funkci, ktera bude sledovat http hlavicky a bude se vracet reffer, na kterej bude odkazovat to tlacitko [tim vylepsime JS fci o to, ze i kdyz je prazdna historie, budeme se mit kam vracet]
- vytvorit funkci, ktera bude doplnovat cestu odkazu tlacitka podle struktury webu [to je celkem vyhodny, ale pokud neni nijak extra udelana struktura webu, tak je to celkem na nic, mam na mysli to, ze kazdej jednotlivej dokument musi jit nekam zaradit - ma nejakou nadrazenou stranku nebo parent adresar]

ale to uz je jenom takovy hrani si ;-)

este by slo ten snippet rozsirit, tim ze by se dal upravovat pres parametry - jako ze do nazvu snippetu das nejenom nazev souboru, ale i adresar, kde se nachazi etc.
nebo do nej jeste muzes pridelat to, ze budes zjistovat priponu souboru a podle toho priradis k odkazu prislusnou ikonku [tak to mam treba udelany ja :-) ]

jak rikam, je mozny si s tim ruzne vyhrat...
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Príspevok od používateľa Spade »

Pravda, to tlacidlo "Späť" nie je nijak extremne spravene, takisto ma napadol sposob odvolavat sa na "vyssie" umiestneny dokument. I ked dalo by sa to spravit aj tak, aby sa tam nastavila presna cesta dokumentu po stlaceni toho tlacidla (napr. http://www.spade.eus.sk/download.php), ale to je viac-menej neprakticke. Skor sa pokusim rozsirit to stromove riesenie cez dokumenty.

Ikonky by sa urcite hodili, to je dobry napad :) Akurat neviem ci sa da do tlacidla vlozit vobec obrazok ... ale asi ano.

Naviac by sa tam asi hodilo pocitadlo stiahnuti, ale to je databaza a s tou zatial pracovat neviem (myslim cez prikazy). Predpokladam ze sa tam vytvori nejaka tabulka a taktiez nejake riadky (kazdy riadok = jeden subor). Toto by bola ale vyborna vymozenost, avsak bude treba to premysliet (aspon z mojej strany).
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

Spade napísal:Ikonky by sa urcite hodili, to je dobry napad :) Akurat neviem ci sa da do tlacidla vlozit vobec obrazok ... ale asi ano.
Mozna bych tu ikonku nedaval do tlacitka, takovej standard bejva, ze se napise nazev souboru, velikost a pak nekde u toho je tlacitko na stazeni, takze mozna bys mohl nad tlacitko pripsat treba "text-2-write.zip" + ikonka zabalenyho archivu...

k tomu pocitadlu:
to je celkem jednoduchy, jedna tabule, na kazdym radku jeden soubor a u nej pocet stazeni, jediny, co je potreba udelat, je takovej redirektor na to stahovani, takze misto toho aby to tlacitko odkazovalo primo na soubor, odkaze se na skript s prislusnym parametrem [napr. id souboru nebo jmeno] a ten zajisti jak zaznamenani navyseni poctu stazeni tak redirekci na stazeni souboru... odkaz v praxi znamena napr:

Kód: Vybrať všetko

http://spade.eus.sk/download.php?soubor=text-2-write.zip
mozna se nekde na netu podivej na nejakej priklad, je jich spousta, z toho si neco "vysapni" a je to ;-)
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

hele ja mam dneska nejakou hravou naladu ;-)
sem tady neco spich, fakt narychlo, ber to jako priklad...

Kód: Vybrať všetko

<?php
if(isset($_GET['id']) && ($_GET['id'] > 0)) {
  @$sql = mysql_query("SELECT * FROM $nazev_tabule WHERE id = '$_GET[id]'");

  if (mysql_num_rows($sql) <> 0) {
    $rs = mysql_fetch_array($sql);

    @$sql = mysql_query("UPDATE $nazev_tabule SET stazeno = stazeno + 1 WHERE id = '$_GET[id]'");
    header("Location:". $rs['umisteni_souboru']);
    exit;
  } else {
    echo "Soubor nenalezen (id ".$_GET['id'].")!!";
  }
} else {
  header("Location: index.php");
}
?>
$nazev_tabule - nazev zabulky, ve ktery budou radky:
id - jedinecny identifikator;
nazev - nazev souboru;
umisteni_souboru - to je asi jasny :-) ;
stazeno - pocet stazeni;

muze jich tam bejt samozrejme vic, je to jenom priklad, muze tam bejt treba jeste popis, datum pridani etc.

//edit:
zapomel sem poznamenat, tomuhle celymu musi predchazet pripojeni do db pres mysql_connect() a mysql_select_db()
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Príspevok od používateľa Spade »

Mno parkrat som si ten tvoj kod precital a v podstate mu rozumiem, ale neviem kam to vlastne vlozit ... mam to vlozit do toho mojho snippetu (niekam na koniec)?
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
dutch
PHP Support
PHP Support
Príspevky: 122
Dátum registrácie: So Dec 17, 2005 11:40 pm
Bydlisko: Mladá Boleslav
Kontaktovať používateľa:

Príspevok od používateľa dutch »

v podstatte je to jednoduchy, ale budes ten tvuj dosavadni kod muset trochu prerobit ;-)
protoze:
a) - musis tvorit odkazy na soubory ve stylu, aby s nima moh pracovat ten obsluznej skriptik na to pocitani stazeni;
b) - nejak ty soubory budes muset usporadat, pac ten skript je poznava podle jedinecnyho id, ktery se udeluje v db [jeden radek = jeden soubor = jedno id] nebo ten skript musis predelat tak, aby ty soubory rozeznaval podle nazvu - ale potom se ti zase nesmi opakovat nazev souboru, nesmis ho splist etc.;
c) - dalsi me ted nejak nenapada, ale asi bych jeste na neco prisel :-)

potom to funguje v podstate takhle:
na strankach je odkaz na soubor tvaru:

Kód: Vybrať všetko

http://spade.eus.sk/index.php?id=76&fid=120 // musi se pouzit fid, protoze id je uz pouzito pri rozeznani stranky
skript si to prelouska, zjisti ze je uvedena promena $_GET['fid'], v ni je 120, podiva se do db do tabule nazev_tabule na radek s id 120, navysi hodnotu stazeni o jedna, zjisti url ze sloupce umisteni_souboru a posle hlavicku s linkem na stazeni souboru prohlizeci... snadne, ze? ;-)
Eto v1 - konečně ;) | Když se dva perou, třetí tam hodí granát...
Používateľov profilový obrázok
Spade
etoModerator
Príspevky: 171
Dátum registrácie: Po Apr 17, 2006 2:24 pm
Kontaktovať používateľa:

Re: Zistenie velkosti suboru

Príspevok od používateľa Spade »

Jednoduche to je, ano. Presne viem, co chcem spravit, ale ja absolutne neviem programovat cez PHP a obzvlast nie cez databazu :( Cez Delphi by som to spravil do obycajneho INI suboru a bol by pokoj, tuto vseliake napajanie :o
Ách deti moje zlaté, milujte sa a zložte sa. Nech si zvíratá berú od vás príklad.
Človečina, RND.
Napísať odpoveď