Hanns: PHP - Dateinamen mit Variable schreiben

Hallo, obwohl das eine einfache Frage sein müsste, habe ich die Antwort nicht gugeln können.

Ich habe zwei Variablen: $1 und $2

in $1 steht "gut" in $2 steht "schlecht"

Nun will ich file_put_contents machen.

$first_file = file_get_contents('ordner1/gut.mp3');

$second_file = file_get_contents('ordner2/schlecht.mp3');

file_put_contents('zusammenfasstes.mp3',$first_file . $second_file);

aber file_get_contents('ordner1/gut.mp3'); muss aus der Variable $1 entstehen. Wie muss ich das schreiben: file_get_contents('ordner1/ ". $1 ." .mp3'); scheint nicht zu funktionieren.

Vielen Dank

  1. Tach!

    Hallo, obwohl das eine einfache Frage sein müsste, habe ich die Antwort nicht gugeln können.

    Die Frage lautet: Strings verknüpfen. Mit Strings umgehen zu können, gehört zu den Grundfertigkeiten nahezu jeder Programmiersprache.

    aber file_get_contents('ordner1/gut.mp3'); muss aus der Variable $1 entstehen. Wie muss ich das schreiben: file_get_contents('ordner1/ ". $1 ." .mp3'); scheint nicht zu funktionieren.

    Anführungszeichen nicht mischen und zu viele Leerzeichen sind auch nicht gut.

    file_put_contents('zusammenfasstes.mp3',$first_file . $second_file);

    Bist du sicher, dass man das so einfach zusammenfassen kann?

    dedlfix.

    1. Hallo und guten Morgen,

      Bist du sicher, dass man das so einfach zusammenfassen kann?

      Da fand ich gerade diesen Vorschlag.

      Wenn ich es nachvollzogen und wie in den Userkommentaren vorgeschlagen repariert habe, probiere ich das mal aus. Vielleicht wird es heut noch 'was ;-)

      Grüße
      TS

      --
      es wachse der Freifunk
      http://freifunk-oberharz.de
      1. Hallo und guten Morgen,

        Bist du sicher, dass man das so einfach zusammenfassen kann?

        Da fand ich gerade diesen Vorschlag.

        Wenn ich es nachvollzogen und wie in den Userkommentaren vorgeschlagen repariert habe, probiere ich das mal aus. Vielleicht wird es heut noch 'was ;-)

        Das spielt auch wenn Du die Tags drinnelässt. VLC zeigt sogar die Bildchen, sofern die MP3's von einer CD ge-ext worden sind die in CDDB verfügbar ist.

        MfG

        1. Hallo und guten Morgen,

          Da fand ich gerade diesen Vorschlag.

          Das spielt auch wenn Du die Tags drinnelässt. VLC zeigt sogar die Bildchen, sofern die MP3's von einer CD ge-ext worden sind die in CDDB verfügbar ist.

          Das Schrieb der Autor ja auch. Aber scheint wohl (bei manchen Playern) zu stocken beim Übergang von einem zum anderen Part.

          Grüße
          TS

          --
          es wachse der Freifunk
          http://freifunk-oberharz.de
          1. Hallo und guten Mittag,

            Da fand ich gerade diesen Vorschlag.

            Das spielt auch wenn Du die Tags drinnelässt. VLC zeigt sogar die Bildchen, sofern die MP3's von einer CD ge-ext worden sind die in CDDB verfügbar ist.

            Das Schrieb der Autor ja auch. Aber scheint wohl (bei manchen Playern) zu stocken beim Übergang von einem zum anderen Part.

            Der macht das ja auch viel zu umständlich.

            my @mp3s = <*.mp3>;
            my $outbin = '';
            foreach my $mp3( @mp3s ){
                my $fh = IO::File->new;
                $fh->open($mp3, O_BINARY|O_RDONLY) or die $!;
                read($fh, my $buffer, -s $fh);
                $fh->close;
                $outbin .= $buffer;
            }
            
            chdir "out" or die $^E;
            my $fh = IO::File->new;
            $fh->open(join('', @mp3s), O_CREAT|O_BINARY|O_RDWR) or die $!;    
            $fh->print($outbin);
            $fh->close;
            

            01-Blowin' In The Wind.mp307-All Along The Watchtower.mp3

            Läuft muckefrei ;)

            1. Lieber pl,

              Der macht das ja auch viel zu umständlich.

              my @mp3s = <*.mp3>;
              my $outbin = '';
              foreach my $mp3( @mp3s ){
                  ...
                  $outbin .= $buffer;
              }
              
              chdir "out" or die $^E;
              my $fh = IO::File->new;
              $fh->open(join('', @mp3s), O_CREAT|O_BINARY|O_RDWR) or die $!;    
              $fh->print($outbin);
              $fh->close;
              

              hmm. Wenn es nur um ein simples Konkatenieren von Binärdaten geht, dann hat man in PHP eine noch kürzere Möglichkeit:

              header('Content-Type: audio/x-mpeg3');
              
              foreach (glob("$dir/*.mp3") as $f) {
                  readfile($f); // direct output to browser
              }
              

              Allerdings fehlt da noch die Sache mit Content-Length und so weiter...

              Mir ist es da viel lieber, die Tag-Informationen aller Dateien würden vor dem Konkatenieren entfernt, damit die Ergebnisdatei wenigstens einigermaßen einem standardisierten Format entspricht (man kann deren Meta-Informationen in einer aufwendigeren Klasse wieder ergänzen). Wenn ich mir z.B. sicher sein kann, dass alle Parameter (wie z.B. die Sample-Rate) in allen Dateien gleich sind, dann hätte ich da wesentlich weniger Bauchschmerzen, als wenn ich "irgendwelche" mp3-Dateien einfach als binären Stream zum Browser sende.

              Liebe Grüße,

              Felix Riesterer.

              1. Hi Felix,

                Der macht das ja auch viel zu umständlich.

                my @mp3s = <*.mp3>;
                my $outbin = '';
                foreach my $mp3( @mp3s ){
                    ...
                    $outbin .= $buffer;
                }
                
                chdir "out" or die $^E;
                my $fh = IO::File->new;
                $fh->open(join('', @mp3s), O_CREAT|O_BINARY|O_RDWR) or die $!;    
                $fh->print($outbin);
                $fh->close;
                

                hmm. Wenn es nur um ein simples Konkatenieren von Binärdaten geht, dann hat man in PHP eine noch kürzere Möglichkeit:

                Ja, ich bin auch geneigt, eine file_get_contents() und eine file_put_contents() in meine Factory aufzunehmen wenn ich mich demnächst dabei ertappen sollte ein zweites Mal $fh->open irgendwo hintippen zu wollen...

                Ansonsten geht das Konkatenieren in Perl sogar noch kürzer über den Diamond-Operator, hierzu werden die Dateinamen einfach auf @ARGV ge-pusht. Für's mp3-Management würde ich jedoch, genau wie Du, möglicherweise ein bischen mehr Aufwand treiben wollen ;)

                MfG

    2. Moin,

      file_put_contents('zusammenfasstes.mp3',$first_file . $second_file);

      Bist du sicher, dass man das so einfach zusammenfassen kann?

      Selbstverständlich kann man MP3-Sequenzen aneinanderhängen (und abspielen).

      Schönen Sonntag.

    3. Anführungszeichen nicht mischen und zu viele Leerzeichen sind auch nicht gut.

      das hat geholfen

  2. Hast Du $1 und $2 als symbolische Beispiele für andere Variablennamen verwendet?

    Wenn nicht: $1 und $2 sind keine gültigen Variablennamen in PHP, da müssen Variablen mit eine Buchstaben oder einem Unterstrich beginnen. $a und $b funktioniert besser.

    Rolf

    1. Hast Du $1 und $2 als symbolische Beispiele für andere Variablennamen verwendet?

      da hast du recht. trotzdem wusste ich nicht, dass das nicht funktioniert. wieder was gelernt. danke