fredag, januar 22, 2021

Fremtving "Gem som" i php?

Daily Rush Debat Programmering Fremtving "Gem som" i php?

  • Forfatter
    Emne
  • #0

    sYnCHAoZ
    Bruger
    12.058 indlæg
    Offline

    Er ved at lave nyt design på hjemmesiden, men har lidt problemer med en download feature.

    Jeg vil have et mine tracks kan downloades ved knaptryk, uden at folk skal højre-klikke og vælge “gem som”.

    Til det formål har jeg opstøvet et php script:

    < ?php header('Content-disposition: attachment; filename=song.mp3'); header('Content-type: audio/mpeg'); readfile('song.mp3'); ?>

    Det virker, men ikke helt efter forventning. Problemet er nemlig, at den KUN vil downloade filerne, hvis der ikke er mellemrum i filnavnet.

    Hvis jeg f.eks. har en sang der hedder “synchaoz – skod sang.mp3”, så er den eneste måde jeg kan få scriptet til at downloade den, ved at omdøbe den så der ikke er nogen mellemrum, til f.eks. “synchaoz_-_skod_sang.mp3”

    Jeg kender INTET til php overhovedet. Scriptet er copy/pasted fra en anden bruger, og jeg har ikke den fjerneste anelse om hvordan man tilføjer eller tweaker i det.

    Nogen der har forslag?

Viser 10 kommentarer - 1 til 10 (af 10 i alt)
  • Forfatter
    Kommentarer
  • #1

    RazorFish
    Bruger
    6.046 indlæg
    Offline

    Hvis der er noget jeg har lært, så er mellemrum i filnavne djævlens værk.

    Sie sind das Essen, wir sind die Jäger

    #2

    TheBeef
    Bruger
    678 indlæg
    Offline

    Man kan ikke bruge %20 som mellemrum bliver overstat til i URL’er?

    altså

    “synchaoz%20-%20sko­d%20sang.mp3”

    Det er et gæt, er langt fra haj til sådan noget:)

    #3

    ice_boy
    Moderator
    13.723 indlæg
    Offline

    Drop mellemrummet.
    Folk kan selv omdøbe filen hvis de ikke synes om – _ . eller hvad du nu vælger at bruge som “mellemrum”

    #4

    TheRaz
    Bruger
    9.294 indlæg
    Offline

    AddType application/octet-stream .mp3


    ForceType application/octet-stream
    Header set Content-Disposition attachment

    Skal smides i en .htaccess fil. Problemet er bare at IE, som sædvanligt, vil gøre tingene på sin egen skod måde.

    Måske kan det også fixes med noget mimetype halløj på server set-uppet?

    Her er mere om mimetype i htaccess: http://www.javascriptkit.com/howto/htaccess9.shtml

    Jeg har atomer i bukserne. Og så kan man desuden aldrig få CPU'er nok. Det er ganske enkelt naturvidenskabeligt umuligt.

    #5

    ElSenator
    Bruger
    8.147 indlæg
    Offline

    #2 Hit the nail on the head.

    Det er fordi mellemrum ikke må bruges direkte i et filnavn i den kontekst. Du skal i stedet bruge html breakede mellemrum som #2 skriver.

    EDIT: Eller, faktisk er det ikke html, så det kan være du bare skal breake dem med backslash.

    Eksempel:
    Test filnavn.mp3 bliver til
    Test\ filnavn.mp3

    Du kan også kigge på om det ikke hjælper at sætte enten enkelt pling eller dobbeltpling omkring filnavnet:
    Eksempel:
    ‘Test filnavn.mp3’ eller
    “Test filnavn.mp3”

    http://www.muldjord.com

    #6

    Picco
    Bruger
    4.216 indlæg
    Offline

    Erstat

    header(‘Content­-disposition: attachment; filename=song.m­p3’);

    med

    header(‘Content­-disposition: attachment; filename=”‘ . rawurlencode(‘song.m­p3’) . ‘”‘);

    Nok mest relevant hvis du f.eks. bruger en variabel i en løkke. Ellers kan du selvfølgelig godt bare manuelt erstatte mellemrum med %20.

    "Kind of like a drunken Batman with a huge cock."

    #7

    sYnCHAoZ
    Bruger
    12.058 indlæg
    Offline

    #2
    %20 virker ikke, det trick bruger jeg normalt også til almindelige html links, det var det første jeg prøvede. Men i php resluterer det helt enkelt bare i, at den downloader en tom fil på 0 bytes med det navn “synchaoz%20-%20skod%20sang.mp3″

    #5
    Blackslash breaks virker heller ikke. Eller dvs. det gør det, men det omdøber bare automatisk filnavnet til at indeholde _ istedet for mellemrum.

    Jeg har også prøvet alle forskellige kombination af ” og ‘ både i konjunktion med og uden %20

    Intet virker, den vil kun downloade hvis filnavnet ikke indeholder mellemrum. Det virker da ret primitivt, når normal html kode sagtens kan finde ud af det.

    #6
    Det resulterer blot i, at den vil downloade selve .php filen :s

    #8

    Picco
    Bruger
    4.216 indlæg
    Offline

    #7: Du er med på, at du kun skal bruge %20 i header()-linjen, ikke? Du skal ikke gøre det i readfile()-linjen også.

    "Kind of like a drunken Batman with a huge cock."

    #9

    sYnCHAoZ
    Bruger
    12.058 indlæg
    Offline

    #7
    Nej det var jeg ikke klar over, jeg brugte %20 i begge. Men det virker på trods ikke – nu downloader den rent faktisk den korrekte fil, istedet for blot en tom fil på 0 byte, men filnavnet har %20 inkluderet, hvilket ser pæn tåbeligt ud.

    Altså det er ikke nogen katastrofe at omdøbe filerne med _ som mellemrum, det er bare sådan en lille detalje jeg havde håbet der var en løsning på.

    #10

    ElSenator
    Bruger
    8.147 indlæg
    Offline

    #9, Under alle omstændigheder er det god praksis at undgå mellemrum i filnavne. Det er i hvert fald min professionelle holdning.

    http://www.muldjord.com

Viser 10 kommentarer - 1 til 10 (af 10 i alt)
  • Du skal være logget ind for at kommentere på dette indlæg.