jocke Skrevet 30. november 2005 Del Skrevet 30. november 2005 Heisann, Driver å mekker en side for podcasts. Brukerene har valget mellom å spille av en podcast med flashplayer, laste ned eller via iTunes/feed. Alt fungerer så langt veldig bra. Derimot opplever jeg at "Last ned"-funksjonen, bare fører til preview i quicktime (bruker mac, men skjer på pc med bl.a. quicktime), istedetfor å faktisk laste ned filen. Siden jeg allerede har flashplayer tilgjengelig for preview, er det ikkje aktuelt å få preview på nedlastningen også. I den sammenheng lurer jeg på om det er mulig å "force" en nettleser til å laste ned en fil - uavhengig om quicktime vil ta preview eller ei, på lik linje med høyreklikk -> Lagre som/Last ned. Her er koden som står for header()-funksjonen; <?php //include database stuff and functions include "custom/config.php"; include "inc/database/adodb.inc.php"; include "inc/connect.php"; include "inc/functions.php"; //create some important globals if (!isset($db['host'])) { die("<br /><br />Cannot find a valid configuration file! <a href=\"install.php\">Install Loudblog now!</a>"); } $GLOBALS['prefix'] = $db['pref']; $settings = getsettings(); foreach ($_GET as $themethod => $thefile) { $method = "count".$themethod; $file = $thefile; } //apache rewrite kills the double slashes of http:// let's undo this! $file = preg_replace ("#^([a-z]{3,5})\:/([^/])#i", "$1://$2", $file); //get the old counting value $dosql = "SELECT ".$method.", countall FROM ".$GLOBALS['prefix']."lb_postings WHERE audio_file = '". urldecode($file) ."'"; $result = $GLOBALS['lbdata']->GetArray($dosql); $counter = $result[0][$method]; $countal = $result[0]['countall']; if (veryempty($counter)) { $counter = 0; } if (veryempty($countal)) { $countal = 0; } $counter += 1; $countal += 1; //do the counting action $dosql = "UPDATE ".$GLOBALS['prefix']."lb_postings SET $method = '$counter', countall = '$countal' WHERE audio_file = '".urldecode($file)."'"; $GLOBALS['lbdata']->Execute($dosql); if(isset($method)) { if(empty($file)) { die ("No File Specified"); } if(strpos($file, "..") !== false) { die ("HACK ATTEMPT!"); } //local or remote file? if(strpos($file, "://") !== false) { $before = ""; } else { $before = $settings['url']."/audio/"; } //redirect us to the real location of the audio file header("Location: ".$before.$file, FALSE, 302); } ?> Lenke til kommentar
PT Skrevet 30. november 2005 Del Skrevet 30. november 2005 Søk litt på Google etter php force download. Da finner du blant annet dette skriptet: <?php $filename = 'dummy.zip'; $filename = realpath($filename); $file_extension = strtolower(substr(strrchr($filename,"."),1)); switch ($file_extension) { case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpe": case "jpeg": case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } if (!file_exists($filename)) { die("NO FILE HERE"); } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Cache-Control: private",false); header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=\"".basename($filename)."\";"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".@filesize($filename)); set_time_limit(0); @readfile("$filename") or die("File not found."); ?> Lenke til kommentar
jocke Skrevet 30. november 2005 Forfatter Del Skrevet 30. november 2005 Har lest om mange av disse, men jeg er ikkje en über pr0 php-coder, så, klarer ikkje helt å få ting til å funke ved å erstatte ting og slikt. Så om noen kunne gitt meg et tips om hvordan, og hva, jeg må erstatte i koden som jeg pastet i første post hadde jeg vært _EVIG_ takknemlig Lenke til kommentar
Magnus Holm Skrevet 30. november 2005 Del Skrevet 30. november 2005 Her er koden for force download: header('Content-Disposition: attachment; filename="podcast.mp3"'); readfile('original.mp3'); Bare legg til fila som skal lastes ned i readile() Lenke til kommentar
jocke Skrevet 30. november 2005 Forfatter Del Skrevet 30. november 2005 Her er koden for force download: header('Content-Disposition: attachment; filename="podcast.mp3"'); readfile('original.mp3'); Bare legg til fila som skal lastes ned i readile() 5229798[/snapback] Siden filnavnet er dynamisk, kan jeg skrive det slik da (se første post for hele koden); //redirect us to the real location of the audio file header('Content-Disposition: attachment; filename=".$before.$file"'); readfile('.$before.$file'); Eller blir det heeeeeelt feil? Lenke til kommentar
jocke Skrevet 30. november 2005 Forfatter Del Skrevet 30. november 2005 Nope, det funket ikkje... Lenke til kommentar
Loomy Skrevet 30. november 2005 Del Skrevet 30. november 2005 Er nok heller readfile($before.'.'.$file); Forutsatt at $before = navnet på filen og $file = filendelsen uten punktum. Lenke til kommentar
jocke Skrevet 30. november 2005 Forfatter Del Skrevet 30. november 2005 Er nok heller readfile($before.'.'.$file); Forutsatt at $before = navnet på filen og $file = filendelsen uten punktum. 5230969[/snapback] Brukte dette; //redirect us to the real location of the audio file header('Content-Disposition: attachment; filename=".$before.$file"'); readfile($before.'.'.$file); Den gjør det rett, ved at den laster ned en fil. Denne blir dog hetende $before.$file.html, og inneholder følgende melding; Warning: readfile(http://podcast.minside.no/audio/.filnavn.mp3): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /srv/www/podcast/inc/counting.php on line 62 Som dere ser, havner det et punktum forran filnavn.mp3, samtidig som den nedlastede filen får feil navn/filendelse (sikkert pga filen som det linkes til, blir feil). Lenke til kommentar
Magnus Holm Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 header('Content-Disposition: attachment; filename="'.$before.$file.'"'); Virker den? Lenke til kommentar
jocke Skrevet 1. desember 2005 Forfatter Del Skrevet 1. desember 2005 (endret) header('Content-Disposition: attachment; filename="'.$before.$file.'"');Virker den? 5235352[/snapback] Kun bruke den funket ikkje. Bruker jeg den, sammen med readfile($before.'.'.$file); ..får eg fortsatt en .html-fil, med følgende tekst; Warning: readfile(http://podcast.minside.no/audio/.filnavn.mp3): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /srv/www/podcast/inc/counting.php on line 62 ...så det kommer fortsatt et punktum før selve filnavnet... Endret 1. desember 2005 av jallakim Lenke til kommentar
ZoRaC Skrevet 1. desember 2005 Del Skrevet 1. desember 2005 Ikke så rart, siden $before er path og $file er selve fila... Brytt ut med readfile($before.$file); Lenke til kommentar
jocke Skrevet 2. desember 2005 Forfatter Del Skrevet 2. desember 2005 (endret) Ikke så rart, siden $before er path og $file er selve fila... Brytt ut med readfile($before.$file); 5235688[/snapback] Genialt. Den laster hvertfall ned filen. ..MEN; - Filen slutter med .mp3.html = får ikkje spilt den av uten videre i medieavspillere. - Filen har filens plassering på web, som navn = http---podcast.minside.no/audio/filnavn.mp3.html Hvordan fikser jeg det slik at filen som nå lastes ned, får filnavnet filnavn.mp3? edit; Safari (mac) lagrer filen som .mp3.html. Camino (mac) gir den filendelsen .mp3, men når filen er 100%, sier den at filen er "korrupt". IE (pc) vil lagre filen som get.html, mens firefox (pc) klarer faktisk å laste ned filen 100% fin, bare med et langt filnavn; http---podcast.minside.no/audio/filnavn.mp3 Endret 2. desember 2005 av jallakim Lenke til kommentar
Magnus Holm Skrevet 3. desember 2005 Del Skrevet 3. desember 2005 Hva med: header('Content-Disposition: attachment; filename="'.$before.$file.'"'); readfile($before.$file); Lenke til kommentar
jocke Skrevet 5. desember 2005 Forfatter Del Skrevet 5. desember 2005 Hva med: header('Content-Disposition: attachment; filename="'.$before.$file.'"'); readfile($before.$file); 5248478[/snapback] Det er slik jeg prøvde, og resulatet ble som beskrevet i min forrige post. Ved å kun bruke readfile($before.$file); laster nettleseren bare ned hashen til filen. Lenke til kommentar
Yell0w Skrevet 5. desember 2005 Del Skrevet 5. desember 2005 Ta en explode(); på .html for å fjerne det fra filnavnet da (hvis det ikke er nødvendig for å få lasta ned fila) Lenke til kommentar
jocke Skrevet 6. desember 2005 Forfatter Del Skrevet 6. desember 2005 Ta en explode(); på .html for å fjerne det fra filnavnet da (hvis det ikke er nødvendig for å få lasta ned fila) 5253953[/snapback] Føler du for å forklare? Jeg trenger ting inn med teskje. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå