Создать WAV-файл для каждой записи в базе данных

У меня есть таблица в базе данных, в которой я храню wav файлы в longblob колонка.
Я пытаюсь создать папку и сохранить все wavданного пользователя на сервере. Пока что у меня есть запрос к базе данных и таблице, и пока простой пример хранения только одного wav, Я не очень знаком с PHP, и мне нужно немного помочь в этом.

$con=mysqli_connect("localhost","root","xxxx","testDB");

if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$sql="SELECT recording FROM users WHERE accountID = '1234'";
$result=mysqli_query($con,$sql);

while ($result = mysqli_fetch_array($row)) {

$data = $result["recording"];

//mkdir('/var/spool/sounds/', 0755, true);

$wavFileName = "/var/spool/sounds/wavfile.wav";
$fh = fopen($wavFileName, 'w');
fwrite($fh, $data);
fclose($fh);
}

Снятое выше создает один wav в этом каталоге.

Если у пользователя есть 5 сохраненных файлов WAV, как создать каталог с именем userID а также file1.wav, file2.wav .. и т.д. внутри?

1

Решение

Просто создайте путь и имя файла с объединением идентификатора пользователя и количества уже созданных файлов. Затем проверьте, существует ли этот путь, в противном случае создайте его.

$directory = "/var/spool/sounds/" . $userID;
$fileExtension = ".wav";
$fileNumber = 1;
while ($result = mysqli_fetch_array($row))
{
$data = $result["recording"];
if (!is_dir($directory))
mkdir($directory, 0755, true);

$wavFileName = $directory . "/file" . $fileNumber;
/*
*  if you need to check if the file already exists,
*  you can rename the new file "/var/spool/sounds/userId/file1_copy.wav"*  or "/var/spool/sounds/userId/file1_copy_copy.wav" if a copy already exists and so on.
*/
while (file_exists($wavFileName . $fileExtension))
$wavFileName .= "_copy";
$fh = fopen($wavFileName . $fileExtension, 'w');
fwrite($fh, $data);
fclose($fh);
$fileNumber++;
}
1

Другие решения

Со следующим кодом будет работать:

$account_id = 1234;
mkdir('/var/spool/sounds/'.$account_id, 0755, true);
$sql="SELECT recording FROM users WHERE accountID = ".$account_id ;
$result=mysqli_query($con,$sql);
$i=0;
while ($result = mysqli_fetch_array($row)) {
$i++;
$data = $result["recording"];

$wavFileName = "/var/spool/sounds/".$account_id."/file".$i.".wav";
$fh = fopen($wavFileName, 'w');
fwrite($fh, $data);
fclose($fh);
}
0

По вопросам рекламы [email protected]