Beste,

Ik heb online een stukje code gevonden

file_put_contents('combined.mp3',
    file_get_contents('file1.mp3') .
    file_get_contents('file2.mp3'));


Dit werkt, echter de bestandsnamen die ik wil gebruiken staan bij mij in een database.

Nu heb ik iets in elkaar gezet waar ik al van weet dat het niet gaat werken, maar wat is de oplossing?

<?PHP

include("connect.php");

file_put_contents('test.mp3',

$query13 = "select * from nieuwsbulletin_items WHERE nieuwsbulletin = '1'";
if ($result13 = mysqli_query($con, $query13)) {
while ($row13 = $result13->fetch_assoc()) {



file_get_contents(''.$row13["bestand"].'') .



}

}

file_get_contents('6 Slot.mp3')

);

?>
Ik heb nooit geweten dat je MP3's met file_put_contents() kon combineren. Ik dacht dat je te maken zou hebben met indexen, en checksums. :-)

Maar als de bestandsnamen in de database staan, dan kan je die toch in een variabele plaatsen?
Daarnaast is een while() loop niet nodig als je één record krijgt. En verder ga je ooit eens de mist in met je genummerde variabelen.

Het achterelkaar plakken van een MP3 heeft wel een nadeel. Het tijdspoor klopt dan niet.
Dus een nette manier is het niet. De beste oplossing is met ffmpeg:
ffmpeg -i "bestand1.mp3" -i "bestand2.mp3" -i "bestand3.mp3" -filter_complex "concat=n=3:v=0:a=1" -y "uitvoer.mp3"

Dit commando heb ik uit ChatGPT, dus het is even proberen.
Hallo Arien,

Het stukje code dat ik gebruikte werkte gewoon goed.
De while is nodig omdat er meer resultaten zijn.

Met het stukje code van jou blijft mijn vraag dus het zelfde. Hoe krijg ik die resultaten op die plek.
Soms zijn het 6 bestanden, soms zijn het 4 bestanden.
Waarom zou je geen ffmpeg gebruiken? Dan weet je dat je 100% goed zit. Met file_put_contents() zit je bij wijze van spreken als een holbewoner mp3's aan elkaar te knopen. Indexen kloppen niet meer, en de kans op corruptie is aanwezig.

Nu heb ik iets in elkaar gezet waar ik al van weet dat het niet gaat werken, maar wat is de oplossing?


Maar wat is de vraagstelling?

Als ik even snel naar je eerste voorbeeld kijk en die vergelijk met je scriptje.. dan zou ik denken dat de werking hetzelfde zou zijn...

Het enige wat ik kan bedenken is dat de volgorde misschien niet klopt.. dan zou je wellicht je query moeten aanpassen?

Zoals ik al zei; wat is de vraagstelling. Wat gaat er goed/fout?
Beste,

De vraag blijft het zelfde;
Hoe krijg ik in de While het ffmpeg of file_get_contents
Kijk eens naar de assignment operator van PHP:

<?php
$text = "Hallo ";
$text .= "daar!";

echo $text;
?>

Dus eerst moet je de bestandsnamen ophalen, en dus je $text uitbreiden, en die variabele verwerk je in je opdracht.

Dus bij ffmpeg moet je dus steeds dit uit je while() krijgen. Zoiets dus in het kort:

-i "$row['file']"
En dan de rest van het commando erachteraan, en die met system() uitvoeren. Let erop dat je ffmpeg wel geïnstalleerd hebt.
Beste,

Wij gebruiken gewoon hosting online, dus ik weet niet of daar ffmpeg op staat.
Soms wel, soms niet.
Probeer het eens met system() of shell_exec(), en dan weet je het.
En als je nou zoiets probeert:


 
// handmatige test
$var  = file_put_contents('combined.mp3');
$var .= file_get_contents('file1.mp3');
$var .= file_get_contents('file2.mp3');



Krijg je dan het gewenste resultaat?

Dan zou je het ook zo kunnen opzetten:

$var  = file_put_contents('combined.mp3');
// query
// start lus
$var .= file_get_contents($row['bestand']);
//einde lus

En die file_get_contents($row['bestand']) kan je dus ook vervangen door -i "$row['file']" als je het betrouwbare ffmpeg wilt gebruiken.

Reageren