PHP script
Szerző
Üzenet
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 .
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 .
Eddig eljutottam:
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.
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.
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
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!
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!
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.
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.
Á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.
Persze, hogy érdekelne .
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.
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.
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
Persze ezt én is úgy gondoltam, hogy a program magától automatikusan jelezne vissza.
Thomas RC írta:
Úgyhogy a fájl letöltésének a visszajelzését nem bízom az userre
Valami nem működik.
Ezt a hibaüzenetet dobja ki, ha meghívom "?q=test.pdf" értékkel:
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):
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:
erre:
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.
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.
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.
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")
Ok, így működik, várom, hogy tényleg kitörli-e negyed óra elteltével a fájlt .
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
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
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:
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.
[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.
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
_________________
Achievement Unlocked
Például így:
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
változóban érhető el a fájlnév).
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
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.
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.