Avatar billede supermichael Nybegynder
17. april 2005 - 10:26 Der er 25 kommentarer og
1 løsning

Hjernevrider php/wml

Jeg har lavet et upload på nettet med en wapadgang. På den side skal man kunne uploade .mid og .midi filer, der så skal kunne hentes fra ens mobil. Rngetomens navn på serveren er noget i stil med 5617598097jhlk, og har ikke noget efternavn. Den er beskyttet af .htaccess, og skal køres ved (fra en anden fil)
at bruge:

header("Content-type: audio/midi");
readfile("files/5617598097jhlk");

Min telefon melder desværre "Your client is not allowed to access the requested object"

Hvis jeg downloader en medifil, med dens oprindelige navn (fx. musik.mid) virker det.. Jeg ved ikke hvorfor det andet ikke gør.

Hvad skal jeg gøre?
Avatar billede Slettet bruger
17. april 2005 - 11:24 #1
Hvorfor har den ikke noget efternavn?
Avatar billede dennismp Nybegynder
17. april 2005 - 11:30 #2
er du sikker på at din telefon kan læse og forstå midi?
Avatar billede supermichael Nybegynder
17. april 2005 - 12:15 #3
Mit uploadprogram er opbygget så filer får et tilældigt navn, idet at filerne skal ligge i samme mappe. Hvis 100 menneker har en fil der hedder stil.doc der skal uploades, ville det jo give problemer. Derfor har jeg valgt at de skal omdøbes til en fil uden navn navnet bliver unikt da det består af time() og [brugernavn]

Når filer skal hentes ud fra uploadet igen, har jeg brugt header() og readfile() selvfølgelig efter at mysql har checket om brugeren er den rette ejer, eller om filen er delt til denne bruger.

Min telefon godt forstå midi.. Jeg har hentet det fra selv samme server.
Avatar billede dennismp Nybegynder
17. april 2005 - 12:26 #4
Jeg søgte lidt på nettet:
http://www.tech-recipes.com/windows_tips531.html


Prøv:
header("Content-Type: audio/midi");
header("Content-Name: test picture");
header("Content-Version: 1.0");
header("Content-Vendor: yourHandle");
header("Content-URL: http://yourwebserverip/sendmidi.php");
header("Content-Size: " . filesize('midifile'));

evt tilføje en readfile() herefter og se om den skal have filen serveret i samme request
Avatar billede Slettet bruger
17. april 2005 - 14:26 #5
Jamen du kan vel også stadig kalde den files/5617598097jhlk.mid ?
Avatar billede dennismp Nybegynder
17. april 2005 - 14:41 #6
er det ikke ligemeget hvad filen hedder? Så længe content-type er korrekt, så er modtageren jo ligeglad.
Avatar billede sukos Juniormester
17. april 2005 - 15:46 #7
Prøv at bruge den fulde sti, når du bruger readfile()
readfile($_SERVER["DOCUMENT_ROOT"] ."/files/filnavn");
Avatar billede supermichael Nybegynder
23. april 2005 - 16:26 #8
Det var et godt foreslag, men det virker ikke.. Jeg prøvede at indsætte det i et dokument.. Den kan godt fatte at jeg downloadede noget, men den downloadede medifil er tom. Ingen lyd eller noget som helst. Den afspiller filen, men der er ingen lyd. Filen jeg brugte til at hente med var:

<?
header("Content-Type: audio/midi");
header("Content-Name: Cantina");
header("Content-Version: 1.0");
header("Content-Vendor: yourHandle");
//header("Content-URL: " . $_SERVER["DOCUMENT_ROOT"]."/files/lars.mid");
header("Content-Size: " . filesize('files/lars.mid'));
readfile($_SERVER["DOCUMENT_ROOT"]."/files/lars.mid");
?>

Jeg prøvede det både med og uden Content-URL. I andledning af denne test, har jeg også omnavngivet filen samt slået htaccess beskyttelsen fra.
Avatar billede dennismp Nybegynder
23. april 2005 - 16:34 #9
hvad hvis du prøver direkte med i browseren? Får du så noget binært "skrammel" ?
Avatar billede supermichael Nybegynder
23. april 2005 - 17:09 #10
Her har du en bid af det..

™.>F‰.@‚e™*\F‰*@ ™,fF‰,@‚4™*_F‰*@™,dF‰,@‚Y™*\?,i‰*@?,@™&^F‰&@™&TF‰&@™1xF‰1@‚Y™*Y-,b‰*@-,@ƒ&™.HF‰.@‚H™*ZA,W‰*@A,@ƒ™.RF‰.@‚R™*UA,a‰*@A,@ƒ0™.JF‰.@‚Y™*YF‰*@™,\F‰,@ƒ™.FF‰.@‚^™*W<,f ‰*@<,@ƒ™.\F‰.@‚T™*WF‰*@™,[F‰,@ƒ@™%wF‰%@*™%wF‰%@/™%xF‰%@C™%xF‰%@*™%xF‰%@ ™&MC&O‰&@&@>™&H‰&@}™&QF‰&@-™&lF‰&@2™&^F‰&@+™&..

sådan ser det ud i en alm. browser.. mobilen siger: Your client is not allowed to access the requested objekt
Avatar billede dennismp Nybegynder
23. april 2005 - 17:12 #11
Har du nogen idé om det er selve mobilen der skriver det, eller om det kommer fra webserveren?
Avatar billede supermichael Nybegynder
23. april 2005 - 17:14 #12
Det binære kommer fra serveren.

Min mobil skriver bare "Your client is not allowed to access the requested objekt", fordi den ikke kan forstå det binære.
Avatar billede supermichael Nybegynder
23. april 2005 - 17:18 #13
Jeg har lige fundet ud af noget nyt. Når man bruger readfile og henter dokumentet ind i filen, virker det ikke. Så kommer der ikke engang en popup til download. Men når den ikke er der, siger min mobil at filen fylder 0 byte!
Avatar billede dennismp Nybegynder
23. april 2005 - 17:43 #14
Jeg burde få mig en ny mobil :) Min crasher når jeg bare tænker på at gøre andet end at ringe folk op :)

Hvis du har en anden url hvor du kan hente midi-filen og det virker - så kunne du jo sammenligne det du får returneret.  Hvis du bruger Firefox, så er der en extension der kan hjælpe dig med at vise headers (Web-developer)
Avatar billede supermichael Nybegynder
23. april 2005 - 20:51 #15
Jeg fil lige en idé.. Jeg har dog ikke så meget kendskab til det, men kan man ikke lige med noget tmpfile() eller noget.. Kan man ikke midlertidigt skrive en fil, som bliver slettet senere (evt. lige efter download)
Avatar billede dennismp Nybegynder
24. april 2005 - 01:40 #16
Det kan du snildt. Det kunne da også være et forsøg værd for at komme viderer. Men det burde også virke med din metode du bruger nu. Men det vigtigeste er nok at få det til at virke :)
Avatar billede supermichael Nybegynder
24. april 2005 - 21:16 #17
Hey dennismp.. Du må lige sige til hvis jeg kommer for langt væk fra emnet, men kender du en metode hvormed man kan slette en fil, efter at den er blevet downloadet een gang..

Jeg tænker nemlig på bare at bruge copy() til at lægge filerne over i en mappe, hvor hedder deres oprindelige navn (kun når der bliver spurgt om download). Men der er det så vigtigt at filen bliver slettet fra igen. Filen skal gerne slettes lige efter den er downloadet.
Avatar billede dennismp Nybegynder
24. april 2005 - 23:01 #18
Jeg tror ikke du kan det direkte i php. Jeg ville nok lave et unikt navn (fx uniqid("")) og så lade brugeren downloade det. Og så have et job der rydder op hver x'ne minut.

Men jeg lavede et site hvor nogle filer krævede at man var medlem - og der brugte jeg et script der sendte headers + readfile(). Det burde du også kunne bruge med din midi-fil.

Hvis det er muligt, har du så en side hvor jeg kan se der hvor det ikke virker og en side hvor det virker?
Avatar billede supermichael Nybegynder
25. april 2005 - 18:41 #19
Problemet er ikke at man ikke kan downloade fra en almindelig browser (der bruger jeg også headers + readfile()). Det er først når mobiltelefonen skal hente filen, at problemet opstår, og jeg tror nok du nævnte noget om en mobil der ikke kunne den slags :)

Jeg har nu hørt fra en i WML forumet her på stedet, at nogle mobiler kigger efter extention.
Den teori har jeg så senere fået understøttet ved at skrive en side med $_SERVER['HTTP_ACCEPT'] der udskrev følgende accepterede mimetypes

application/vnd.wap.multipart.mixed
image/bmp
image/png
image/gif
image/jpeg
image/vnd.wap.wbmp
application/vnd.wap.wmlc
application/vnd.wap.wbxml
application/vnd.wap.wmlscriptc
application/xhtml+xml
application/vnd.wap.xhtml+xml
text/html
application/vnd.wap.mms-message
application/java-archive
application/java
application/vnd.oma.dd+xml
text/css
*/*
text/x-vcard
text/x-vcalendar

Da typerne audio/midi eller audio/mid ikke er iblandt dem, må det nok have noget med filens extention, for den henter jo filen hvis jeg linker direkte til den hvor den har efternavnet '.mid' (med mindre htaccess forhiumndrer det).

Men ja.. dit forslag om at filerne kunne stettes hvert x'ne minut ender nok med at blive løsningen. Men jeg tror den endelige løsning bliver at læse filernes filemtime(), og derefter slette filer der er over 15 min. gamle (altså ved et scrip der bliver udført når der er aktivitet på siden)

Mange tak for hjælpen dennismp. Jeg synes næsten du skal have hele guldposen som tak for din hjælp. psot lige et svar! :)
Hvis du nu skulle have lyst til at svare på et spørgsmål mere, må du også gerne det. Valget er dit!

Jeg tænker nemlig lidt på, om man på en eller anden måde, kan skrive et script der udfører sig selv. f.eks. en der checker op på filerne hvert 15. minut, også uden at scriptet bliver triggered af et scrip.. På den måde kan man jo undgå at folk kan skrive direkte links til mappen, og hente filer på den måde.
Avatar billede dennismp Nybegynder
25. april 2005 - 20:13 #20
Det er ikke for at downloade filen, men for at se hvilke headers den sender. Det er jo nemmest hvis man har en virkende og ikke virkende - og så se hvad forskellen er.

Om man bruger en mobiltelefon eller en browser burde være det samme, sålænge man bare skal se hvilke headers der sendes med file.

Hvis du vil tjekke hvilken content-type din apache sender når du linker direkte til filen kan du se på mime.types. I  min står der:

audio/midi                  mid midi kar

Altså, sender apache audio/midi som mime-type når den skal sende en .mid (og .midi og .kar) fil. Der må være noget andet der driller.

Jeg er ikke sikker på jeg forstår dit sidste spørgsmål. Hvis du skal have kørt noget periodisk så er crontab sagen (unix miljø) - der er bare ikke mange webhoteller der giver folk lov til at bruge det. Du kan også få en anden til at kalde dit script reglmæssigt.
Avatar billede supermichael Nybegynder
25. april 2005 - 20:44 #21
Jeg forstår ikke helt hvad du mener med en der virker og en der ikke virker..
Jeg har ikke fået en medifil til at blive hentet fra siden via mobil, ved at bruge headers og readfile().. Kun ved at linke på siden ved hjælp af et almindeligt link f.eks. <a href="sti/til/filen.mid">Filnavn</a>.

Jeg har dog fået typerne image/gif og image/jpeg til at virke, ved hjælp af headers og readfile(). Jeg tror det har noget at gøre med at det også er accepterede filer ifølge min mobilbrowser.

Derfor er min endelige teori :D at browseren på mobilen i dette tilfælde kigger efter filens extention, da den ikke genkender og godkender mimetypen..

Vil du mene at jeg har fat i noget af det rigtige?

PS: Af hensyt til det sidste spørgsmål, så kan jeg ikke inkludere metoder der ikke bliver brugt af de fleste.. Jeg har lidt et håb om måske at dele mit system til den som har lyst til at bruge det. (når jeg har løst de største gåder :D).
Men desuden er det sidste spørgsmål ikke så vigtigt, tænk ikke mere over det.. Jeg laver sikkert noget helt tredje alligevel.. :) måske noget med htpasswd eller noget (er nok mere sikkert).. skal bare lige have det til at komunikere med php-login.. Men nu skal jeg nok lade være med at hive mere ud af dig..

Ellers mange tak for din hjælp!
Avatar billede dennismp Nybegynder
25. april 2005 - 21:13 #22
Det er lige gået op for mig, at jeg kunne prøve at udføre den test (virker vs virker-ikke) :)

-- headers når filen hentes direkte (http://dennis.moellegaard.dk/tmp/610400/Stan.midi)
HTTP/1.1 200 OK
Date: Mon, 25 Apr 2005 19:15:47 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) DAV/1.0.3 PHP/4.3.10-12
Last-Modified: Thu, 10 Mar 2005 07:14:47 GMT
ETag: "3c7ec-b4d0-422ff3e7"
Accept-Ranges: bytes
Content-Length: 46288
Connection: close
Content-Type: audio/midi

data
-- headers når filen hentes via et script som dit udgangspunkt (http://dennis.moellegaard.dk/tmp/610400/)

HTTP/1.1 200 OK
Date: Mon, 25 Apr 2005 19:17:08 GMT
Server: Apache/1.3.33 (Debian GNU/Linux) DAV/1.0.3 PHP/4.3.10-12
X-Powered-By: PHP/4.3.10-12
Connection: close
Content-Type: audio/midi

data
-----

Det kunne være interessant hvis du kunne prøve de to urls og se om du har samme problem (direkte virker, igennem script virker ikke). Hvis det er tilfældet, så kunne vi jo prøve at tage nogle af de headers fra "Virker" og sende dem via scriptet og se om det hjælper. Det SKAL virke :)

Men det kommer an på om du gider at kæmpe videre :). Din mobiltelefon kan jo ikke se om data bliver sendt igennem et script eller direkte af apache. Så jeg tror der er noget i din mobil der forventer at der er en bestemt ekstra header, som den skal bruge. Men det er kun gætterier.

Jeg har ikke noget imod at vi arbejder viderer med det :) (sidder og bakser med et mobilspil, så det vil kun være nyttige erfaringer for mit vedkommende, hvis vi fik det itl at virke.)
Avatar billede supermichael Nybegynder
26. april 2005 - 23:57 #23
Hej igen. Jeg har testet de to url's og der opstår stadig et problem ved scriptet.. Filen kan sagtens hentes over direkte download.
Har du lavet det, så de samme headers bliver sendt som ved direkte download? For hvis du ikke har, er dette vist dårligt nyt.

Hvis du ikke har, kunne du så ikke tænke dig at lave det. Jeg har nemlig ikke så meget tid i denne uge. Jeg sidder hjemme ved en ven og skriver eksamensprojekt. Her er ikke internet som hjemme ved mig. Hvis du evt. skulle have lyst til at lave det, kunne du så ikke lægge en info.txt fil ud i samme mappe, hvor du skriver om det er klart til download. så kunne jeg checke via min mobil.. Den kan læse txt-filer. Smart ik' :).

Du skal selvfølgelig kun lave det hvis du har tid (Jeg vil lige indskyde at jeg ikke er en doven nar, jeg har bare ikke lige muligheden og tiden i øjeblikket).
Avatar billede dennismp Nybegynder
27. april 2005 - 00:29 #24
Jeg har rettet så "indirekte" URL'en skulle sende de headers der mangler iforhold til direkte download.

Det er fair nok med eksamensprojektet. Jeg har også et der skal være afleveret fredag kl 12 :)


(har lagt en info.txt ud, hvis du ikke ser dette :))
Avatar billede supermichael Nybegynder
27. april 2005 - 07:55 #25
Så kunne jeg være her igen. vi skulle lige ind på skolen for at aflevere produkt.
Jeg har testet scriptet, men den melder stadig fejl. Så må det vel være det.. hulk hulk.. Det ser ikke ud til at vi har heldet med os..

Af hensyn til den info.txt, så vil min telefon hente den. Jeg tror den vil have en mimetype.. Mærkeligt. Men det skal i hvert fald gøres ved at skrive 'Addtype text/plain txt' i din .htaccess fil. (hvis du da ikke allerede ved det). Jeg har fået det til at virke i en php-fil ved at defienre mimetypen først, og så bruge readfile().

Men ja. du sagde at du ville lave noget java program til telefoner, og det tror jeg stadig vil virke. 'application/java' er jo en af de accepterede typer, så der burde ikke være et problem for browseren (jeg ved det selvfølgelig ikke, det har det jo med at drille sådan noget)

Hvis du på noget tidspunkt skulle få problemer med noget, du tror jeg har mulighed for at hjælpe med, kan du jo bare skrive en email til super_michael_85[snabela]hotmail.com. Jeg siger i hvert fald mange tak for hjælpen.
Avatar billede dennismp Nybegynder
27. april 2005 - 21:36 #26
Ærgerligt vi ikke fik løst det. Men tak for kampen.

Det ved java, var ikke direkte relateret til dig projekt. Det er et projekt jeg er igang med - og så kunne det jo være at jeg kom ud i en ligende situation som du er i.

Men htaccess (eller mod_auth_mysql hvis det skal være nemt at tilføje/fjerne brugerer) burde det jo så virke :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester