Időzóna: (GMT +1 óra) RSS - hozzászólások

PHP script

Szerző
Üzenet
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.05.28. 14:01    Hozzászólás témája: PHP script
Hozzászólás az előzmény idézésével
Van a szerveren egy abba.mp3 nevű fájl.
Lenne egy mp.php nevű fájl.
Ha valaki ezt a fájl meghívja a böngészőben így: http://valami.hu/mpk/mp.php?file=abba.mp3&download=okay , akkor le tudja tölteni az abba.mp3 fájlt (ha a &download=okay nincs ottan, akkor viszont nem tudja letölteni és ez akkor is igaz, ha az okay helyett valami más szerepel).
Az mp.php pedig törölné a szerverről az abba.mp3 fájl, miután a kliens letöltötte azt (ha nem sikerült a letöltés, mert megszakadt, vagy valami, akkor viszont nem törölné).

Mivel php-ben nem vagyok nagyon jártas, ezért abban kérném a segítséget, hogy milyen függvényekre lesz szükségem, illetve hogyan tudnám megoldani a fájl letöltődésének a figyelését. Mert ezzel az a gond, hogy szerintem nem nagyon lehet php-ből ezt megoldani :?.

Felhasználó profiljának megtekintése Privát üzenet küldése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.05.28. 17:58    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Eddig eljutottam:

Kód:

<?php

$file = $_GET['file'];
$download = $_GET['download'];

if ($download == 'okay')
{
    header("location: $file");
    unlink("$file");
}

?>

A gond ezzel a kóddal csak az, hogy azonal törli a fájlt, mielőtt még elkezdődne a letöltés. Ha kiveszem az unlink sort, akkor működik, de nem törli a fájlt.

Felhasználó profiljának megtekintése Privát üzenet küldése
fberci
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2005.05.28. Szombat 1:00
Hozzászólások: 7388
Hozzászólás Elküldve: 2008.05.28. 18:09    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Ez így nem fog menni, előtte el kell küldened a fájlt, pl. nem átirányítod a fájlra, hanem rögtön kinyomod a tartalmát PHP-ből a readfile()-lal.

Az viszont nem tudom hogyan kapható meg - ha egyáltalán meg lehet csinálni -, hogy a kliens visszajelezzen ha megkapta a fájlt. Ultrabiztos rendszer biztos nincs, de szerintem még közelítő se nagyon. Én AJAX-ra gondoltam először, de még azzal se tudod megkapni, hogy a fájl letöltődött-e vagy sem. Lehet, hogy a felhasználóra kell bízni.
_________________
Üdv.: fberci
Kereső | Szabályzat | phpBB3 telepítés/frissítés/konvertálás | Útmutatók | Olympus - phpBB3 | Kérlek, ne küldj privát üzenetet nem személyes dologgal kapcsolatban!

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.05.29. 12:10    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Esetleg lehetne csinálni egy letöltésvezérlőt, de nem tudom, hogy miben kéne megcsinálni. JavaScript ? AJAX esetleg ? AJAX-ban egyáltalán nem vagyok jártas, a JavaScriptben is csak alapszintben tartok. Meg ez így már egy nagyobb "vállalkozás" lenne; nem érné meg.

Felhasználó profiljának megtekintése Privát üzenet küldése
Marcee
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2006.01.17. Kedd 1:00
Hozzászólások: 2921
Hozzászólás Elküldve: 2008.05.29. 15:14    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Bocs, hogy rövid leszek, de ma csak ennyire futja. Leghamarabb hétvége végefelé tudnék jobban utánanézni, ha érdekelne (mármint nem engem, hanem téged :) ).

Állományok kiszolgálása PHP-ból - Letöltés sikerességének megállapítása rész: Nem mai a cikk és sajnos most időm sincs kipróbálni, hogy működik-e.

Illetve egy másik kevésbé elegáns, de üzembiztosabbnak mondható megoldás - szintén csak nagyvonalakban:
A fájlokhoz bejegyzéseket tárolsz el (adatbázisban, egy sima szövegfájlban stb.), mindegyik fájlhoz tartozik a fájlnév bejegyzésen kívül 3 másik: letöltötték, letöltés_időpont és letöltés_ip.
Ha valaki szeretne letölteni egy fájlt, akkor a letöltő szkript először megnézi a letöltötték mező értékét, hogy egyenlő-e eggyel, ha igen, akkor nincs miről beszélni. Ha nulla, akkor az aktuális időpontot és a letöltő IP címét elmenti a megfelelő mezőkbe, illetve a letöltötték-et beállítja egyre, így már senki más nem tudja letölteni. És még teszünk egy kitételt, hogy az elmentett IP címről a letöltési időponttól kezdve mondjuk 5 percig / fél óráig / óráig akárhányszor letöltheti az adott fájlt, így ha megszakad vagy hibás a letöltés, akkor még van ideje újrakezdeni.
A letöltötték=1-es mezőket és a hozzá tartozó fájlokat meg időnként kézzel vagy valamilyen esemény hatására (pl. másik letöltés, admin bejelentkezés stb.) kitörlöd. Lehet még mókázni, hogy az IP cím helyett annak a hashét tárolod csak el vagy a felhasználói azonosítót (már ha van), de az nem változtat az elven.

Vagy van egy még bonyolultabb megoldás, hogy írsz egy asztali / böngészőben futó letöltő programot, ami a letöltés végén visszajelez a szervernek, hogy törölheti a fájlt. Persze itt meg szóban jön az, hogy milyen programnyelven írd, hogy mindenkinél fusson, illetve, hogy akarnak-e a felhasználóid egy fájl letöltése miatt egy külön programot telepíteni. Viszont itt lehetnek plusz kényelmi funkciók, amit nem tud nyújtani a másik megoldás: sebesség szabályozás, szünet/folytatás, több helyről párhuzamosan tölteni ugyanazt a fájlt, letöltés után azonnal törölni a fájlt stb.

Felhasználó profiljának megtekintése Privát üzenet küldése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.05.29. 16:17    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Persze, hogy érdekelne :).

Marcee írta:

Vagy van egy még bonyolultabb megoldás, hogy írsz egy asztali / böngészőben futó letöltő programot, ami a letöltés végén visszajelez a szervernek, hogy törölheti a fájlt. Persze itt meg szóban jön az, hogy milyen programnyelven írd, hogy mindenkinél fusson, illetve, hogy akarnak-e a felhasználóid egy fájl letöltése miatt egy külön programot telepíteni. Viszont itt lehetnek plusz kényelmi funkciók, amit nem tud nyújtani a másik megoldás: sebesség szabályozás, szünet/folytatás, több helyről párhuzamosan tölteni ugyanazt a fájlt, letöltés után azonnal törölni a fájlt stb.
Ez teljesen ki van zárva, mert ezt úgy kéne megoldani, hogy aki letölti az ne tudjon arról, hogy miután letöltötte törölve lesz a fájl. Úgyhogy a fájl letöltésének a visszajelzését nem bízom az userre, mert akkor tudni fog róla.

Felhasználó profiljának megtekintése Privát üzenet küldése
Marcee
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2006.01.17. Kedd 1:00
Hozzászólások: 2921
Hozzászólás Elküldve: 2008.06.06. 14:08    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Elkészült egy elég kezdetleges, de működőképes változat. Azt hiszem elég bőségesen van kommentezve, ezt már tovább tudod alakítani a saját ízlésed szerint: Letöltés

Thomas RC írta:

Úgyhogy a fájl letöltésének a visszajelzését nem bízom az userre
Persze ezt én is úgy gondoltam, hogy a program magától automatikusan jelezne vissza.

Felhasználó profiljának megtekintése Privát üzenet küldése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.06.06. 16:43    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Köszönöm, majd tanulmányozom :).

Felhasználó profiljának megtekintése Privát üzenet küldése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.06.06. 20:36    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Valami nem működik.

Ezt a hibaüzenetet dobja ki, ha meghívom "?q=test.pdf" értékkel:

Kód:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/thomasrc/users/dev/script1/index.php on line 69
A fájl már nem létezik vagy soha nem is létezett.
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/thomasrc/users/dev/script1/index.php on line 24


Elmondom, hogy mit hogyan csináltam.
Először is lefuttattam kis módosítással az SQL-t (a tábla nevéhez odaraktam egy script1_ -et, hogy meg tudjam különböztetni a többi tábláktól, illetve hogy a jövőben ne legyen ütközés a táblák nevénél):

Kód:

CREATE TABLE `script1_fajlok` (
  `fajlnev` varchar(255) NOT NULL,
  `idopont` int(11) NOT NULL,
  `ip` varchar(15) NOT NULL,
  PRIMARY KEY  (`fajlnev`)
);


Ezután bemásoltam a "/var/www/thomasrc/users/dev/script1/" mappába a letolto.php-t és nyomban át is neveztem index.php-vá.
Az index.php-t megnyitottam, majd átírtam ezeket a sorokat:

Kód:

// BEÁLLÍTÁSOK
$beallitasok['db_gepnev'] = 'localhost';
$beallitasok['db_felhasznalo'] = 'felhasznalonev';
$beallitasok['db_jelszo'] = 'jelszo';
$beallitasok['db_adatbazis'] = 'adatbazis';
$beallitasok['tabla_neve'] = 'fajlok'; // Nyugodtan megváltoztatható
$beallitasok['konyvtar'] = 'fajlok/'; // Ennek lehet valami bonyolultabb, nehezebben kitalálható nevet is adni
$beallitasok['idokorlat'] = 900; // Ez kb. negyedórának felel meg
// BEÁLLÍTÁSOK VÉGE


erre:

Kód:

// BEÁLLÍTÁSOK
$beallitasok['db_gepnev'] = 'localhost';
$beallitasok['db_felhasznalo'] = 'thomasrc';
$beallitasok['db_jelszo'] = 'hehe_nem_írom_ide';
$beallitasok['db_adatbazis'] = 'thomasrc';
$beallitasok['tabla_neve'] = 'script1_fajlok'; // Nyugodtan megváltoztatható
$beallitasok['konyvtar'] = 'files/'; // Ennek lehet valami bonyolultabb, nehezebben kitalálható nevet is adni
$beallitasok['idokorlat'] = 900; // Ez kb. negyedórának felel meg
// BEÁLLÍTÁSOK VÉGE


Majd, az index.php (azaz a "volt" letolto.php) mellé létrehoztam egy files mappát (ami így a /var/www/thomasrc/users/dev/script1/files mappa lett a rendszerben), és ebbe beletettem egy test.pdf fájlt (amit találtam valahol, fogalmam sincs egyébként mi a tartalma).

Ezután pedig meghívtam a böngészőben (ha valaki kifog egy olyan időpontot, amikor be van kapcsolva a gépem, akkor élőben "kipróbálható a hibaüzenet"):
http://thomasrc.tx.hu/~dev/script1/index.php?q=test.pdf

És jött a hibaüzenet.

Ui.: Ahogy nézem az SQL-ben sem történik semmi változás. Azért nézegetem, hogy mit írhattam el, hátha sikerül megoldanom ameddig nem segít valaki :).

Szerk.: Ja igen, a fájl létezik, nem pedig úgy ahogy a hibaüzenetben van leírva.

Felhasználó profiljának megtekintése Privát üzenet küldése
Marcee
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2006.01.17. Kedd 1:00
Hozzászólások: 2921
Hozzászólás Elküldve: 2008.06.06. 20:49    Hozzászólás témája: Az utolsó lépés kimaradt
Hozzászólás az előzmény idézésével

Thomas RC írta:

Ui.: Ahogy nézem az SQL-ben sem történik semmi változás. Azért nézegetem, hogy mit írhattam el, hátha sikerül megoldanom ameddig nem segít valaki :).

Szerk.: Ja igen, a fájl létezik, nem pedig úgy ahogy a hibaüzenetben van leírva.
A megoldás egyszerű: én vagyok a leggyengébb láncszem.
Azt elfelejtettem leírni, hogy mivel nincs fájlfeltöltő része, ezért nincs minek beírni a fájl nevét az adatbázisba (úgy gondoltam, hogy az majd a majdani feltöltést végző kód feladata lesz).
Szóval egy

Kód:

INSERT INTO script1_fajlok (fajlnev) VALUES ("test.pdf")
orvosolni fogja a hibát.

Felhasználó profiljának megtekintése Privát üzenet küldése
Thomas RC
Gyakorlott phpBB-s
Gyakorlott phpBB-s


Csatlakozott: 2006.09.29. Péntek 1:00
Hozzászólások: 4377
Hozzászólás Elküldve: 2008.06.06. 20:55    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Ok, így működik, várom, hogy tényleg kitörli-e negyed óra elteltével a fájlt :).

Felhasználó profiljának megtekintése Privát üzenet küldése
Alex Menrich
Kezdő phpBB-s
Kezdő phpBB-s
Avatar

Csatlakozott: 2007.10.25. Csütörtök 9:58
Hozzászólások: 45
Hozzászólás Elküldve: 2008.06.25. 16:45    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Nekem az lenne a kérdésem, hogyan tudok egy ujablakot megnyitni fix méretekkel. Azt tudom hogyan kell ha button ra teszem, de ott sem tudom hogy kell hogy megnyitni fix ablakokkal. Azt akarom hogy mondjuk megnyiljon egy uj ablak 400*300-ban középre igazitva.
Továbbá az lenne kérdésem hogy hogyan tudom megoldani azt, hogy egy textfield ami elég nagy megjelenjen 1 kép.
Továbbá hogyan adom at a textfieldnek egy másik oldalrol a szoveget? Ezelatt érte ezt. Van a news.php itt lehet léptrehozni a szöveget, de ha mondjuk rákattintok 1 képek buttonra akkor megnyilik 1 uj ablak (insert.php) és ott beirom a kép nevét. Meg az elérésért. Majd az okéra kattintva beilleszti az elözö phpben beirtakat a formban.
Fontos lenne nagyon
_________________
Achievement Unlocked

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése AIM Yahoo Messenger MSN Messenger
Marcee
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2006.01.17. Kedd 1:00
Hozzászólások: 2921
Hozzászólás Elküldve: 2008.07.01. 17:51    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Az előző hozzászólásom elszállt, így csak röviden válaszolok.
[url=http://www.Thomas RC98.hu/webmuhely.php?sw=800&lang=hu&kat=js&page=ablak&file=101]Ablaknyitás[/url] - itt találsz rá példákat, a böngésző popup blokkolója nagy valószínűséggel megfogja.
Értékátadás: pl. PHP-val, nagyon primitív és ezért nem biztonságos* példa:

Kód:

<input name="akarmi" value="<?php echo $_POST['akarmi']; ?>">

De nekem a leírásod alapján úgy tűnik, hogy amit szeretnél, az egy WYSIWYG szerkesztő, ilyen például a TinyMCE vagy az FCKeditor. Azt hiszem mindkettő tudja (de az egyik biztosan :) ) a tallózós kép beszúrási funkciót, amit te szeretnél.

*: Semmiből érkező adatot nem íratunk ki / dolgozunk fel csak úgy mindenféle ellenőrzés nélkül, mint ahogy én tettem, csak azért hagytam ki, mert az ellenőrzés kb. háromszor annyi lenne, mint maga a példa.

Felhasználó profiljának megtekintése Privát üzenet küldése
Alex Menrich
Kezdő phpBB-s
Kezdő phpBB-s
Avatar

Csatlakozott: 2007.10.25. Csütörtök 9:58
Hozzászólások: 45
Hozzászólás Elküldve: 2008.07.02. 10:50    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Hogyan tudom leellenőrizni 1 mappában hogy hány kép van? Azt szeretném hogy mpnjuk van 1 mappa és abban van 3 kép. És hogy mikor megnyilik az uj ablak 1 list menuben megjelenjen a képek neve.
_________________
Achievement Unlocked

Felhasználó profiljának megtekintése Privát üzenet küldése Felhasználó weblapjának megtekintése AIM Yahoo Messenger MSN Messenger
Marcee
Adminisztrátor
Adminisztrátor
Avatar

Csatlakozott: 2006.01.17. Kedd 1:00
Hozzászólások: 2921
Hozzászólás Elküldve: 2008.07.03. 11:25    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Például így:

Kód:

<select name="kepek" size="1">
<?php
$konyvtar_neve='kepek';

if (is_dir($konyvtar_neve)) {
 $konyvtar_azonosito = opendir($konyvtar_neve);
 while (gettype($fajl = readdir($konyvtar_azonosito)) != boolean) {
      if (is_file($konyvtar_neve. '/' .$fajl)) {
         $fajlnev = explode('.', $fajl);
         $tipus = strtolower(end($fajlnev));

         if (($tipus == 'jpg') || ($tipus == 'jpeg') || ($tipus == 'gif') || ($tipus == 'png')) {
            echo ( '<option value="'. $fajl .'">'. $fajl .'</option>' ); // ****
         }
      }
 }
 closedir($konyvtar_azonosito);
}
?>
</select>

Ez egy legördülő listát fog neked készíteni, amiben benne lesznek a kepek könyvtárban lévő képek fájlnevei. Valószínűleg sok ismeretlen függvényt fogsz benne találni, amiknek utána tudsz nézni a http://php.net oldalon (igaz csak angolul).
Ha csak a fájlneveket szeretnéd megkapni, akkor nem kell az első és utolsó HTML sor, valamint a megcsillagozott sort kell átírnod arra, amit szeretnél (a

Kód:

$fajl
változóban érhető el a fájlnév).

Felhasználó profiljának megtekintése Privát üzenet küldése
Hozzászólások megtekintése:  

Időzóna: (GMT +1 óra) RSS - hozzászólások
Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.

Hirdetés
Hirdetés