The reason behind your problem is specific to your system as I can easily run your code and generate the .ogg file. Here's what I get when I run a php file with your code in it:
dir2ogg 0.11.8 (2009-08-04), converts audio files into ogg vorbis.
INFO: Converting "/home/mehran/001.mp3" (using mpg123 as decoder)...
And as I said before the 001.ogg
is successfully created. Whatever is going on with your execution is specific to your configuration. The way to debug it is to get and print the stderr
of the process. Here's how you can get it (shell_exec
and exec
functions do not give you that):
<?php
function _pipeExec($cmd, $input = '')
{
$proc = proc_open($cmd, array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);
fclose($pipes[0]);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$rtn = proc_close($proc);
$result = array(
'stdout' => $stdout
, 'stderr' => $stderr
, 'return' => $rtn
);
return $result;
}
$command = 'dir2ogg /home/mehran/"001.mp3"';
$output = _pipeExec($command);
print_r($output);
You can find more information on proc_open here. But the short description is that it does what exactly you want, it gives you all the outputs one process produces. In my computer the above code generates:
Array
(
[stdout] => dir2ogg 0.11.8 (2009-08-04), converts audio files into ogg vorbis.
INFO: Converting "/home/mehran/001.mp3" (using mpg123 as decoder)...
[stderr] => [wav.c:371] warning: Cannot rewind WAV file. File-format isn't fully conform now.
Encoding standard input to
"/home/mehran/001.ogg"
at quality 3.00
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m00s so far] /
Encoding [ 0m00s so far] -
Encoding [ 0m00s so far] \
Encoding [ 0m00s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m01s so far] \
Encoding [ 0m01s so far] |
Encoding [ 0m01s so far] /
Encoding [ 0m01s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m02s so far] /
Encoding [ 0m02s so far] -
Encoding [ 0m02s so far] \
Encoding [ 0m02s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m03s so far] -
Encoding [ 0m03s so far] \
Encoding [ 0m03s so far] |
Encoding [ 0m03s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m04s so far] /
Encoding [ 0m04s so far] -
Encoding [ 0m04s so far] \
Encoding [ 0m04s so far] |
Encoding [ 0m05s so far] /
Encoding [ 0m05s so far] -
Encoding [ 0m05s so far] \
Encoding [ 0m05s so far] |
Encoding [ 0m05s so far] / [wav.c:371] warning: Cannot rewind WAV file. File-format isn't fully conform now.
Encoding [ 0m05s so far] -
Done encoding file "/home/mehran/001.ogg"
File length: 3m 13.0s
Elapsed time: 0m 05.1s
Rate: 37.8620
Average bitrate: 110.9 kb/s
[return] => 0
)
You can use the return
value to check for the success of the process, and as you can see even the progress indicator is also printed. Nevertheless, you can look into stderr
and find what's wrong with your code.
[UPDATE]
Unfortunately, I can not replicate your error. I just tried to do what you are trying to do and faced a problem of my own I thought it's worth sharing. Here's my complete, working code to upload and convert an audio file:
<?php
function _pipeExec($cmd, $input = '')
{
$proc = proc_open($cmd, array(0 => array('pipe', 'r'), 1 => array('pipe', 'w'), 2 => array('pipe', 'w')), $pipes);
fwrite($pipes[0], $input);
fclose($pipes[0]);
$stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]);
$stderr = stream_get_contents($pipes[2]);
fclose($pipes[2]);
$rtn = proc_close($proc);
$result = array(
'stdout' => $stdout
, 'stderr' => $stderr
, 'return' => $rtn
);
return $result;
}
?>
<html>
<body>
<form method="post" action="./ogg.php" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="music" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
if (isset($_FILES['music'])) {
$des = $_FILES['music']['tmp_name'] .'.'. pathinfo($_FILES['music']['name'], PATHINFO_EXTENSION);
rename($_FILES['music']['tmp_name'], $des);
$command = 'dir2ogg "' . $des . '"';
$output = _pipeExec($command);
echo "<div style='height: 500px; overflow: auto;'><pre>";
print_r($output);
echo "</pre></div>";
}
?>
</body>
</html>
The part which if you omit will result in a problem is:
$des = $_FILES['music']['tmp_name'] .'.'. pathinfo($_FILES['music']['name'], PATHINFO_EXTENSION);
rename($_FILES['music']['tmp_name'], $des);
This will rename the temporary uploaded file so it will have the same extension as its original filename, i.e. it will append .mp3
to the uploaded file. Without this I couldn't convert the file to an .ogg
file.
One more thing regarding your error, make sure that the file you are uploading is compatible with dir2ogg
as I have read in some of the posts here and there that some formats are not compatible and thus dir2ogg
outputs errors like yours.
In the end, make sure that your file's size does not exceeds your upload size and/or post size limits. A phpinfo()
will prompt you your current upload_max_filesize
and post_max_size
. Perhaps your file is not uploaded at all! You can make sure of your successful file upload by looking into the $_FILES['music']['error']
.
That's all I've got!