天天看点

用PHP实现一个MP3下载脚本

这只是一个下载MP3的PHP脚本,当然无法与一些下载软件相提并论。这脚本只是实现了MP3下载的功能,没有线程下载,也不支持断点下载。

这只是我为自己偷懒写的小工具,实现一些没有规则的下载地址,在目前我无法用下载软件工具实现下载的情况下,自己写了一个。

基本的实现原理:分析下载连接页面,抓取下载地址,用file_get_contents()函数下载文件到本址。

由于脚本跑的时间会较长,最好在命令行下跑,用页面跑会出现脚本执行时间太长中断的情况(也可以修改配置)。

下面是实现的脚本:

<?php

$listUrl = 'http://www.englishmorning.com/magic_english.php';

$listPage = file_get_contents($listUrl);

$listPattern = '/<div id="primarycontent">.*<div class="footer">/is';

preg_match($listPattern, $listPage, $page);

$listPage = $page[0];

unset($page);

$listLinks = explode('<a href="', $listPage);

unset($listLinks[0]);

foreach($listLinks as $k => $link){

$link = substr($link, 0, strpos($link, '">'));

$detalPage = file_get_contents($link);

$pattern = '/<embed src=".*" mce_src=".*" width="380"/is';

preg_match($pattern, $detalPage, $urls);

$url = str_replace('<embed src="', 'http://www.englishmorning.com/', $urls[0]);

$url = str_replace('" mce_src="', 'http://www.englishmorning.com/', $urls[0]);

$url = str_replace('" width="380"', '', $url);

unset($urls);

$listLinks[$k] = $url;

}

foreach($listLinks as $url){

getFile($url);

echo "download {$url} done./n";

}

function getFile($url){

$fileName = substr($url, strrpos($url, '/')+1);

$fileSize = @filesize($url);

header ( "Pragma: public" );

header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );

header ( "Cache-Control: private", false );

header ( "Content-Transfer-Encoding: binary" );

header ( "Content-Type:audio/mpeg MP3");

header ( "Content-Length: " . $fileSize);

header ( "Content-Disposition: attachment; filename=".$fileName);

$file = file_get_contents($url);

$fp = fopen($fileName, 'w');

fwrite($fp, $file);

fclose($fp);

}