PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Datei Pfad wird nicht richtig übernommen



Mysterox
08.02.07, 14:11
Hallo zusammen,

ich hoffe das dies hier der richtige Bereich ist!

Folgendes Problem habe ich: Ich lese den Pfad einer Datei aus einer MySQL Datenbank.
Wenn ich den überarbeiteten Pfad aber dann an ein Programm übergeben schneidet er immer ein Stück ab!

Beispiel:
Das hier ist der Pfad, den ich aus der DB habe und überarbeitet habe
/data/3\ Doors\ Down/\[1999\]\ -\ The\ Better\ Life/01\ -\ Kryptonite.mp3

Wenn ich nun folgendes ausführe, läuft alles wunderbar und ih höre musik!

echo system("/usr/bin/mpg321 -o alsa -g 100 /data/3\ Doors\ Down/\[1999\]\ -\ The\ Better\ Life/01\ -\ Kryptonite.mp3");

Wenn ich den Pfad zuvor in eine Variable schreibe geht es auch noch:

echo $lied_pfad = "/data/3\ Doors\ Down/\[1999\]\ -\ The\ Better\ Life/01\ -\ Kryptonite.mp3";

echo system("/usr/bin/mpg321 -o alsa -g 100 $lied_pfad");

Aber es geht immer nur so lange wie der Pfad wirklich hart codiert im Skript drin steht.

Sobald ich das wirklich 100% dynamisch mache, den Pfad aus der DB holen, den Pfad überarbeiten und dann die Variable wie an den Player übergebe, bekomme ich folgende Meldung:

High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2, and 3.
Version 0.59q (2002/03/23). Written and copyrights by Joe Drew.
Uses code from various people. See 'README' for more!
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!
: No such file or directory The Better Life/01 - Kryptonite.mp3

Er schneidet davorne quasi ziemlich viel ab!

Hat jemand ne Ahnung warum, oder wo dran das liegen könnte?
Ich habe alle "Sonderzeichen" im Pfad "ecaped" also daran kann es nicht liegen!

Rechte sind auch alle vollkommen in ordnung!

Bin echt für jede Hilfe Dankbar.

mfg

Mysterox

MiGo
09.02.07, 00:55
echo system("/usr/bin/mpg321 -o alsa -g 100 $lied_pfad");
Das erste, was mir dazu einfällt ist "script.php?liedpfad="dontexists.mp3&; rm /* -rf" :)


Ich habe alle "Sonderzeichen" im Pfad "ecaped" also daran kann es nicht liegen!
Die hast du wie escaped?
Poste doch bitte mal ein wenig echten Code, nicht nur "das habe ich bearbeitet" - das macht das Troublesooting wesentlich einfacher.

Sobald ich das wirklich 100% dynamisch mache, den Pfad aus der DB holen, den Pfad überarbeiten und dann die Variable wie an den Player übergebe, bekomme ich folgende Meldung:
Wie schon gesagt, bitte echten und vollständigen Code.

marce
09.02.07, 06:42
würde auch vermuten, dass es am php-Code liegt... je nach dem, was Du da wie machst musst Du nämlich nicht escapen...

Mysterox
09.02.07, 13:41
@Migo

Toller Befehl, aber das läuft nur in einem kleinen unternehmen beim dem niemand eine ahnung davon hat!

Und der zugriff auch nur durchs netzwerk möglich ist und auch kien WLAN verwendet wird!

Ausser dem gibt es immer noch nen unterschied zwischen POST und GET Variablen ;-)

So dann hier mal etwas mehr Code:


$pfad_lied = mysql_result($get_pfad, 0, 2);
$pfad_lied = str_replace (" ", "\ ", $pfad_lied);
$pfad_lied = str_replace (" ", "\ ", $pfad_lied);
$pfad_lied = str_replace (",", "\,", $pfad_lied);
$pfad_lied = str_replace ("(", "\(", $pfad_lied);
$pfad_lied = str_replace (")", "\)", $pfad_lied);
$pfad_lied = str_replace ("'", "\'", $pfad_lied);
echo system ("screen -A -m -d -S MP3Player /usr/bin/mpg321 -o alsa -g 100 $pfad_lied");


Und wenn ich mir dann den Befehl den eigentlich ausführen sollte, anzeigen lasse, steht folgendes auf meinem Bildschrim:
screen -A -m -d -S MP3Player /usr/bin/mpg321 -o alsa -g 60 /data/3\ Doors\ Down/\[1999\]\ -\ The\ Better\ Life/01\ -\ Kryptonite.mp3

Wenn ich diesen Befehl dann manuell im Terminal ausführe klappt es wunderbar.

In meiner DB ist folgendes gespeichert:
/data/3 Doors Down/[1999] - The Better Life/01 - Kryptonite.mp3

Svenny
09.02.07, 13:44
wieso denn 2x


$pfad_lied = str_replace (" ", "\ ", $pfad_lied);
$pfad_lied = str_replace (" ", "\ ", $pfad_lied);


?

Mysterox
09.02.07, 13:56
Ups, habe ich wohl was beim kopieren gerade vercheckt, steht aber im script nur einmal drin!

tschloss
09.02.07, 14:34
Warum übergibst du nicht den Pfad in in Hochkomma und verzichtest auf das escapen (habe es nicht probiert, wäre aber davon ausgegangen, dass das geht).

Die [ ] werden wohl auch escaped (die fehlen in deiner Skriptabschrift).

(Und was meinst du mit "nen unterschied zwischen POST und GET Variablen ;-)" - das ist dank zahlreicher Broiwser-Extensions wirklich keine Hürde mehr.)

sysop
09.02.07, 14:49
escape nicht und nimm single quotes....

Mysterox
09.02.07, 15:31
Hi,

ja aber der ganze sicherheits aspekt ist dort vollkommen wurscht!
Wie gesagt firmen netzwerk, kein WLAN, von aussen nicht erreichbar!
Daher wird da niemand etwas mutwillig zerstören!

"]" und "[" werden aus escaped, habe ich auch nur vergessen zu posten!

Wenn man sich ansieht was das script ausgibt, dann sollte ja auch alles richtig escaped sein!

Oder muss ich es bei diesem Aufruf nicht escapen?

Ich habe das halt alles so aufgebaut, wie ich es auch per Konsole aufrufen würde!

tschloss
09.02.07, 16:17
Es haben dir jetzt zwei Leute dasselbe empfohlen, probiere es doch mal aus!

(nichts escapen und Hochkomma (single quotes am besten) - das sollte auch auf der Konsole gehen)