Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
MP3 Header einlesen !! (problem) [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
MP3 Header einlesen !! (problem)


 
DarkMight0
01-02-2003, 11:05 
 
Ich versuche gerade den Header einer MP3-Datei einzulesen um heraus zu finden welche Bitrate das File hat.


<?php
$handle=opendir(".\\upload\\");
while ($filename = readdir ($handle))
{
if ($filename != "." && $filename != "..")
{
echo "$filename \n";
$file_handle = fopen (".\\upload\\".$filename, "rb");

// 1. Byte als integer ausgeben
$header_byte = fread ($file_handle, 1);

settype($header_byte, "integer");
echo $header_byte;

echo "<br>\n";

fclose ($file_handle);
}
}
closedir($handle);
?>


Mein Problem ist jetzt nur das als integerwert für das erste Byte immer 0 ausgibt. Das erste Byte einer MP3-datei sehen aber so aus: FF

Wie man nun weiß entspicht FF dem Dezimalwert 255.

Kann mir jemand einen Tip geben was ich da falsch mache ???

 
mrhappiness
01-02-2003, 11:16 
 
$file_handle = fopen (".upload".$filename, "rb");

muss das nicht so heißen:

$file_handle = fopen ('.\upload\\'.$filename, 'rb');<?php
$handle=opendir('.\\upload');
while ($filename = readdir ($handle))
{
if ($filename != '.' && $filename != '..')
{
echo "$filename n";
$file_handle = fopen ('.\\upload\\\\'.$filename, 'rb');
if (!$file_handle)
{
echo 'Datei konnte nicht geöffnet werden.<br />';
continue;
}
// 1. Byte als integer ausgeben
$header_byte = fread ($file_handle, 1);

settype($header_byte, "integer");
echo $header_byte;

echo "<br>n";

fclose ($file_handle);
}
}
closedir($handle);
?>

 
martin_de
01-02-2003, 11:30 
 
mir ist nicht klar, weshalb du settype() verwendest.
settype($header_byte, "integer");
was soll das bringen?

hier wird irgendein numerischer wert erwartet, 'FF' ist aber keiner, deshalb wird 0 zurückgegeben.

 
mrhappiness
01-02-2003, 11:38 
 
ich denke eher nicht, dass es daran liegt. Er liest ja auch nur ein Zeichen, also kann maximal ein F drinstehen, was allerdings 0 ergibt.

mach doch vor dem (imo unnötigen) umwandeln per settype das hier: echo '---'.$header_byte.'---'; Was steht da für ne Zahl?

 
DarkMight0
01-02-2003, 13:19 
 
also wenn ich das settype nicht mache bekomme ich folgendes Zeichen :

ÿ

ich hatte eigentlich gedacht das settype mir den ASCII-Code des Chars liefert, denn dieser währe 255 !!!

Und übrigens mit FF ist der HEX-Code des ersten Bytes gemeint.


$file_handle = fopen (".upload".$filename, "rb");

muss das nicht so heißen:

$file_handle = fopen ('.\upload\'.$filename, 'rb');


Ja das muss so heissen nur hat das Forum den Code leider verändert und den \\ gelöscht !!

 
mrhappiness
01-02-2003, 13:23 
 
Ord (www.php.net/manual/de/function.ord.php) is das was du suchst

 
wahsaga
01-02-2003, 14:28 
 
Original geschrieben von mrhappiness
ich denke eher nicht, dass es daran liegt. Er liest ja auch nur ein Zeichen, also kann maximal ein F drinstehen, was allerdings 0 ergibt.
nee, happy, das ist quatsch...

das dateisystem arbeitet mit 8 bit = 1 byte gleich wertebereich 0 bis 255.

wenn du dir mal eine datei in einem hex-editor ansiehst, werden dort die einzelnen bytes ja auch mit zwei zeichen angezeigt, weil 0 bis 255 hexadezimal nun mal 00 bis ff entspricht.

 
mrhappiness
01-02-2003, 14:31 
 
Original geschrieben von martin_de
settype($header_byte, "integer");
...
hier wird irgendein numerischer wert erwartet, 'FF' ist aber keiner, deshalb wird 0 zurückgegeben. ich bezog mich dadrauf und das fread($file_handle,1);
wollte bloß klarmachen, dass in $header_byte nich zweimal der buchstabe F drinsteht

 
wahsaga
01-02-2003, 14:35 
 
wollte bloß klarmachen, dass in $header_byte nich zweimal der buchstabe F drinsteht
ach so.
aber eigentlich doch - kommt nur drauf an, in welchem format du dir das byte anzeigen lässt *g*

 
mrhappiness
01-02-2003, 14:44 
 
*g* auch wieder wahr

aber dann steht in der variablen ja auch 0377 drin :D

 
DarkMight0
01-02-2003, 15:59 
 
@ mrhappiness

ord() war genau die funktion die ich brauchte

So jetzt habe ich die ersten 32 Bits als String jetzt muss ich den String nur wieder teilen und zwar in 12 , 1 , 2 , 1 , 4 , 2 , 1 , 1 , 2 , 2 , 1 , 1 und 2 byte lange Strings.

Gibt es da auch eine nützliche Funktion oder muss ich das alles per 'Hand machen.

 
mrhappiness
01-02-2003, 16:05 
 
wenn es da ein einheitliches trennzeichen gibt, kannst du die ersten 32bit als ganzes nehmen und dann exploden$teile=explode($trennzeichen,$die32bit);

 
DarkMight0
01-02-2003, 16:26 
 
Es gibt leider gar kein trennzeichen den der String sieht z.B. so aus:

11111111111110111001001001000000

ich müßte das ganze jetzt folgendermassen aufsplitten :

111111111111 1 01 1 1001 00 1 0 01 00 0 0 00

Später nuss ich diese Teile wieder mit bindec() in eine Dezimalzahl umwandeln.

 
mrhappiness
01-02-2003, 16:28 
 
dann wünsch ich dir viel spaß mit substr (php.net/manual/de/function.substr.php) *g*

 
DarkMight0
01-02-2003, 20:58 
 
So ich habe das Script fertig gestellt und es mal in das andere Forum gepostet.

MP3 Header einlesen (lösung) (http://www.php-resource.de/forum/showthread.php?s=&postid=94305#post94305)

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:09 Uhr.