scrooge Δημοσ. 13 Φεβρουαρίου 2011 Δημοσ. 13 Φεβρουαρίου 2011 καλημερα σε ολους, ειμαι στα τελικα βηματα της πτυχιακης μου. εχω ενα σοβαρο προβλημα. (συστημα xampp σε win7) εχω κατι mp3 σε ενα φακελο. η εργασια με καποιον τροπο που δε μας ενδιαφερει, ξερει το path του καθε mp3 στην μεταβλητη $dataArr[$j]. (πχ D:\Music\Muse\Showbiz\12 - Hate This And I'll Love You.mp3) θελω να κανω μια href για να λινκαρω το filename και με το πατημα του να παιζει το mp3 με wmp, built in player klp whatever. το θεμα ειναι οτι εχω ψαξει κ εχω βρει οτι για λογους ασφαλειας προφανως η javascript η php ο apache τα παντα ολα δεν εχουν προσβαση σε φακελο εκτος τον root φακελο λειτουργειας του project (στην περιπτωση μας C:\xampp\htdocs\project) >echo '<td class="tdstyle"><a href="stuff/Mary\'s Flower Superhead - The Boy You Can\'t Destroy.mp3" >'.$dataArr[$j].'</a></td>'; echo '<td class="tdstyle"><a href="file:///'.$dataArr[$j].'" >'.$dataArr[$j].'</a></td>'; εδω φαινονται οι 2 τροποι που εχω δοκιμασει. ο πρωτος ειναι για λογους testing και δουλευει αψογα, το αρχειο ανοιγει κ παιζει κανονικοτατα γιατι ειναι μεσα στον apache φακελο. στον δευτερο τροπο τρωω fail γιατι παει να παρει προσβαση εκτος φακελου. αν τωρα, αντι για την δευτερη γραμμη βαλω σε ενα αλλο αρχειο html για λογους testing την γραμμη ><a href="file:///D:\Music\Muse\Showbiz\12 - Hate This And I'll Love You.mp3">D:\Music\Muse\Showbiz\12 - Hate This And I'll Love You.mp3</a> και το ανοιξω το html αρχειο απλα, ΕΚΤΟΣ server, το αρχειο παιζει κανονικα. με το που το ανοιγω στον server τρωω fail. αυτο για να αποδειξω οτι ο κωδικας σαν κωδικας ειναι σωστος. απλα με κοβει την προσβαση localy ο apache. πριν γινει λογος για το οτι μπερδευω τα backslashes με τα slashes, να πω οτι δεν παιζει κανενα ρολο, ολοι οι browser πλεον καταλαβαινουν οτι κ αν βαλεις, οποτε μην κολλαμε σε αυτο. η προφανης ερωτηση μου: αυτο θελω να υλοποιηθει, ειναι αρκετα σημαντικο. υπαρχει καποιος τροπος να γινει αυτο που θελω, κ αν ναι ποιος? (προφανως η εργασια θα τρεχει μονο τοπικα οποτε δε μας ενδιαφερουν τα security breaches και μονο μεσω localhost, μονο μεσα απο τον server.) οτι κ αν εχω δοκιμασει δεν δουλευει. Η αυτο που θελω να κανω ειναι απλα ΑΔΥΝΑΤΟΝ? εχω τσεκαρει στο νετ οτι υπαρχουν κατι js script που σου φορτωνουν τα τοπικα drive πχ αλλα δε ψηνομαι ιδιαιτερα για κατι τετοιο, προτιμω καποιον πιο απλο τροπο. εκτος αν ειναι απλα αδυνατον. παρακαλω πολυ τα φωτα απο τους γνωστες. Ευχαριστω.
parsifal Δημοσ. 13 Φεβρουαρίου 2011 Δημοσ. 13 Φεβρουαρίου 2011 Χμμμ...αυτό που δείχνεις εδώ: >echo '<td class="tdstyle"><a href="file:///'.$dataArr[$j].'" >'.$dataArr[$j].'</a></td>'; θα έπρεπε να δουλεύει, γιατί δομικά δεν έχει κάποια διαφορά με το παρακάτω: ><a href="file:///D:\Music\Muse\Showbiz\12 - Hate This And I'll Love You.mp3">D:\Music\Muse\Showbiz\12 - Hate This And I'll Love You.mp3</a> που έβαλες σε στατικό HTML αρχείο και σου δούλεψε. Μήπως είναι πρόβλημα με τις τιμές των μεταβλητών που κάνεις echo; Για κάνε στον browser σου ένα δεξί κλικ > View source και τσέκαρε τί HTML παράγεται εκεί ακριβώς...
scrooge Δημοσ. 13 Φεβρουαρίου 2011 Μέλος Δημοσ. 13 Φεβρουαρίου 2011 ναι, θα επρεπε να δουλευει κ ειναι ιδιο. εχω τσεκαρει κ το source που λες.ειναι σωστες οι μεταβλητες με echo. δυστυχως ειναι το θεμα του sandboxing του apache για ασφαλεια, οπως ειπα παραπανω. απλα δε δινει προσβαση σε φακελο εξω απο τον φακελο του κ εχω κολλησει εκει.. δες το κορυφαιο:αν κανω δεξι κλικ στο λινκ copy link location κ το κανω paste σε αλλο tab σε ΚΑΘΕ browser το αρχειο παιζει κανονικα. που αποδυκνειει οτι το κολλαει ο server δυστυχως κ οχι ο κωδικας. δε λεω οτι αυτο ειναι bug, ειναι feature προστασιας κ καλα κανει κ ειναι οπως ειναι, απλα αναρωτιεμαι αν υπαρχει καποιος τροπος να το παρακαμψω για να κανω την δουλεια που θελω. προς το παρον δεν εχω βρει κατι κ εχω απογοητευτει.
parsifal Δημοσ. 13 Φεβρουαρίου 2011 Δημοσ. 13 Φεβρουαρίου 2011 Για το συγκεκριμένο παράδειγμα, αν κάποιος εφαρμόζει περιορισμό πρόσβασης (όχι ακριβώς σωστός εδώ ο όρος sandboxing), αυτός θα είναι ο browser σου και σίγουρα όχι ο Apache ή η PHP. Ο συνδυασμός των δύο τελευταίων, ο,τι ήταν να κάνει, το έκανε. Δηλαδή, να τυπώσει κάποια strings που συνθέτουν ένα ορισμένο HTML output και να το σερβίρει στον browser σου. Από 'κει και πέρα, το τί κάνει αυτό το output, δεν είναι θέμα του Apache αλλά του browser σου. Και όντως, πρέπει να είναι περιορισμός πρόσβασης που επιβάλλουν οι browsers, με τη λογική ότι η ιστοσελίδα που τους σερβίρεται δεν προέρχεται από το τοπικό filesystem αλλά από κάποιον δικτυακό server (ακόμη κι αν είναι ο localhost) οπότε απαγορεύουν την πρόσβαση στο τοπικό filesystem μέσω των file:/// URLs, στο context της ιστοσελίδας αυτής πάντα γι' αυτό το copy/paste σε νέο tab δουλεύει (γιατί το κάνεις με δική σου ευθύνη, ο browser δεν ξέρει από που το έκανες copy και δεν τον νοιάζει). Πρέπει να σκεφτείς λίγο διαφορετικά τη λογική της web εφαρμογής σου για να λύσεις το συγκεκριμένο θέμα, νομίζω. Βλέπεις και μόνος σου ότι το γεγονός πως ο client (browser), τα δεδομένα σου (MP3) και ο Apache βρίσκονται στο ίδιο μηχάνημα είναι εντελώς συμπτωματικό και πρέπει να σκέφτεσαι βάσει της γενικής περίπτωσης που λέει «ο server είναι remote μηχάνημα». Μία λύση θα ήταν να κάνεις τον Apache να σερβίρει αυτός τα MP3, με κάποιο PHP download script. Έτσι, δεν χρειάζεται τα MP3 να βρίσκονται στον root folder της ιστοσελίδας σου, γιατί αντίθετα απ' ο,τι έγραψες πιο πάνω, η PHP έχει πρόσβαση και εκτός του root site folder, σε όλο το τοπικό σύστημα αρχείων του μηχανήματος όπου εκτελείται (εκτός από εκεί που δε μπορεί λόγω user permissions, προφανώς).
scrooge Δημοσ. 13 Φεβρουαρίου 2011 Μέλος Δημοσ. 13 Φεβρουαρίου 2011 εχω καταλαβει τι εννοεις κ εχεις δικιο. δυστυχως αυτο που λες δεν γινεται,αλλα εχω βρει μια αλλη λυση. εκανα ενα php script που παιρνει αυτο το filename κ για λογους testing το εβαλα να το κανει fopen και fread το αρχειο. δουλευει κανονικα, φυσικα βγαζει οτι να ναι σαν αποτελεσματα αφου το αρχειο ειναι binary. που σημαινει οτι οντως η php εχει μια χαρα προσβαση σε ολο το pc. τωρα η ερωτηση ειναι η εξης: υπαρχει καμια εντολη στην php που να κανει open ενα αρχειο με εξωτερικο 3rd party προγραμμα; η ενναλακτικα, να το κανει σαν εκτελεση των windows. πχ οπως οταν κανω ενα διπλο κλικ στο mp3 μου και ανοιγει ο media player. ειναι εφικτο κατι τετοιο? αν ναι, το προβλημα μου λυθηκε... edit: το κανα!! system ($file_name); that simple.... και ανοιγει με το wmp κανονικα. ευχαριστω πολυ για την βοηθεια!
parsifal Δημοσ. 13 Φεβρουαρίου 2011 Δημοσ. 13 Φεβρουαρίου 2011 εχω καταλαβει τι εννοεις κ εχεις δικιο. δυστυχως αυτο που λες δεν γινεται,αλλα εχω βρει μια αλλη λυση. εκανα ενα php script που παιρνει αυτο το filename κ για λογους testing το εβαλα να το κανει fopen και fread το αρχειο. δουλευει κανονικα, φυσικα βγαζει οτι να ναι σαν αποτελεσματα αφου το αρχειο ειναι binary. που σημαινει οτι οντως η php εχει μια χαρα προσβαση σε ολο το pc. τωρα η ερωτηση ειναι η εξης: υπαρχει καμια εντολη στην php που να κανει open ενα αρχειο με εξωτερικο 3rd party προγραμμα; η ενναλακτικα, να το κανει σαν εκτελεση των windows. πχ οπως οταν κανω ενα διπλο κλικ στο mp3 μου και ανοιγει ο media player. ειναι εφικτο κατι τετοιο? αν ναι, το προβλημα μου λυθηκε... Το ίδιο πράγμα λέμε. Μάλλον παρεξήγησες τον όρο "PHP download script": Δε σημαίνει αποκλειστικά και μόνο άνοιγμα dialog box του browser για να σώσεις το αρχείο στο δίσκο. Μπορεί να είναι απλά σερβίρισμα των περιεχομένων του αρχείου στον browser (όπως έκανες με την fopen και fread, ή με την readfile), αλλά ορίζοντας πιο πριν κατάλληλο MIME type στους HTTP headers, ώστε ο browser να ξέρει τί τύπου δεδομένα του έρχονται σε binary μορφή και τί να κάνει με αυτά. Π.χ. αν είναι εικόνες να τα προβάλλει ο ίδιος, αν είναι multimedia αρχείο να φορτώσει κάποιο plugin ή να καλέσει εξωτερική εφαρμογή που θα τα παίξει. edit: το κανα!! system ($file_name); that simple.... και ανοιγει με το wmp κανονικα. ευχαριστω πολυ για την βοηθεια! Άουτς, πολύ κακή και πρόχειρη λύση αυτή! Η system είναι εντολή που προκαλεί εκτέλεση προγράμματος στον server, θυμήσου τί σου έγραψα πιο πάνω για τη λογική διαχωρισμού αυτών των δύο στο μυαλό σου και το γεγονός ότι έτσι όπως δουλεύεις κάποια πράγματα θα δουλεύουν συμπτωματικά μόνο στο δικό σου μηχάνημα. Π.χ. αν δεν είχες κάποιον standalone audio player εγκατεστημένο στο σύστημά σου ή αν δεν ήταν registered το .mp3 file extension στο λειτουργικό σύστημα, θα έπαιρνες πάπαλα.
scrooge Δημοσ. 13 Φεβρουαρίου 2011 Μέλος Δημοσ. 13 Φεβρουαρίου 2011 sorry, ναι το ξερω οτι ειναι προχειρη απλα δουλευει. ημουν ασχετος απο php, τωρα μεσα σε 20 μερες εμαθα κ εκανα την πτυχιακη. εδωσα το λινκ απο απατσι (εχω dyndns κ μπορει να παιζει κ ονλαιν το project, απλα οτι εκτελει γινεται στο δικο μου μηχανημα) στο ατομο που κανουμε μαζι την πτυχιακη κ ο media player ανοιγε μονος του στο pc κ επαιζε τραγουδια καταλαβαινω οτι ειναι καφριλα.θα ψαξω να βρω πως γινεται αυτο με τα mime types στον header που ειπες, μπας μπορεσω κ το κανω να παιζει μεσω browser. αν δε το καταφερω θα ξαναενοχλησω. ευχαριστω!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.