在 Windows 伺服器環境下,PHP 可透過 COM 元件呼叫 Windows Media Player (WMP) 物件模型,讀取 MP3、WAV 等媒體檔案的播放長度。此方法僅限 Windows 平台且需安裝 WMP,Linux/Unix 環境請改用 getID3 函式庫或 FFmpeg。
<?php
$file = "C:/Users/Public/Music/Sample Music/Kalimba.mp3";
if (!file_exists($file)) {
exit('媒體檔案不存在。');
}
// 建立 Windows Media Player COM 物件
$player = new COM("WMPlayer.OCX");
$media = $player->newMedia($file);
// 取得播放長度(單位:秒,浮點數)
$duration = $media->duration;
echo "檔案:{$file}<br>";
echo "播放長度:{$duration} 秒<br>";
echo "格式化:" . gmdate("H:i:s", $duration) . "<br>"; // 時:分:秒
// 釋放 COM 物件
$media = null;
$player = null;
?>
| 屬性/方法 | 說明 |
|---|---|
newMedia(path) | 建立媒體物件,載入檔案資訊 |
duration | 播放總長度(秒,double) |
durationString | 格式化字串(如 "04:32") |
name | 媒體標題/檔名 |
getItemInfo("Attribute") | 取得擴充屬性(如 "Author", "Album", "Genre") |
<?php
function getAudioDuration($filepath) {
if (!file_exists($filepath)) return false;
try {
$player = new COM("WMPlayer.OCX");
$media = $player->newMedia($filepath);
$dur = $media->duration;
$media = null;
$player = null;
return $dur;
} catch (com_exception $e) {
return false;
}
}
$dir = "D:/Music/";
$files = glob($dir . "*.{mp3,wav,wma,flac}", GLOB_BRACE);
echo "<table border='1'><tr><th>檔名</th><th>長度(秒)</th><th>時:分:秒</th></tr>";
foreach ($files as $file) {
$sec = getAudioDuration($file);
if ($sec !== false) {
echo "<tr><td>" . basename($file) . "</td>";
echo "<td>" . round($sec, 2) . "</td>";
echo "<td>" . gmdate("H:i:s", $sec) . "</td></tr>";
}
}
echo "</table>";
?>
php.ini:extension=php_com_dotnet.dll(Windows 專用)。$player 物件,或改用純 PHP 解析器(如 getID3)。getID3、ffprobe (FFmpeg) 或 mediainfo 指令列工具。<?php
require_once('getid3/getid3.php');
$getID3 = new getID3;
$fileinfo = $getID3->analyze('audio.mp3');
echo "播放長度:" . $fileinfo['playtime_seconds'] . " 秒<br>";
echo "比特率:" . $fileinfo['bitrate'] . " bps<br>";
echo "編碼格式:" . $fileinfo['audio']['codec'] . "<br>";
?>
COM 呼叫 WMP 是 Windows 環境下快速取得音訊長度的便利方法,適合內部管理工具或 Windows 專用專案。對於跨平台、高效能或生產環境服務,強烈建議採用 getID3 等純 PHP 解析器或 FFmpeg 等專業媒體處理工具。