知道服务器上图片所保存的路径,如何批量下载到本地,其中850文件夹及014文件名都从000开始匹配,文件存在就下载,否则略过。
以下代码只能下载指定页面的:(望大神指教,谢过!)
<?php
$url = "http://site.com/";
$content=file_get_contents($url);
$reg="//";
preg_match_all($reg,$content,$matches);
以下代码只能下载指定页面的:(,望大神指教,谢过!
<?php
$url = "http://site.com/";
$content=file_get_contents($url);
$reg="//";
preg_match_all($reg,$content,$matches);
$path = './imgdownload';
if(!file_exists($path)){
mkdir($path, 0777);
}
for($i = 0;$i < count($matches[1]);$i ++){
/*explode
$url_arr[$i] = explode('/', $matches[1][$i]);
$last = count($url_arr[$i])-1;
*/
//strrchr
$filename = strrchr($matches[1][$i], '/');
downimage($matches[1][$i],$path.$filename);
//downimage($matches[1][$i],$path.'/'.$url_arr[$i][$last]);
}
function downimage($url,$filename="") {
if($url=="") return false;
if($filename=="") {
$ext=strrchr($url,".");
if($ext!=".gif" && $ext!=".jpg" && $ext!=".png" && $ext!="jpeg") return false;
$filename=date("ymdhis").$ext;
}
ob_start();
//make file that output from url goes to buffer
readfile($url);
//file_get_contents($url); 这个方法不行的!!!只能用readfile
$img = ob_get_contents();
ob_end_clean();
$fp=@fopen($filename, "a");//append
fwrite($fp,$img);
fclose($fp);
return $filename;
}
可以使用 curl_multi_* 系列函数批量请求远程地址。 把所有需要请求的页面放到一个数组里,每次并发20个去请求。
建议修改下程序思路,先批量根据页面地址获取需要下载的图片地址,第二步再批量处理图片下载。
两个部分的都可以用 culr_multi_*系列函数去并发处理。
代碼寫得太糟糕了,還有幾處錯誤,幫你重寫一份。
在一個循環里多次調用 addpage 就行了。
如果已經有 url 的話,也可以直接調用 download。
for ($i = 0; $i < 99; ++$i)
download('http://cdn.image.com/static/' . $i . '.png', download_path . $i . '.png');
效率有點低,可以考慮改用 culr_multi_* 系列函數。
$referer) {
// echo $url, "\n";
$filename = pathinfo($url, pathinfo_filename) . '.' . pathinfo($url, pathinfo_extension);
download($url, $path . $filename, $referer);
}
// error_reporting(1);
}
function addpage($page, &$urls) {
$cur = extractpage($page);
for ($i = 0, $n = count($cur); $i < $n; ++$i) {
$j = $cur[$i];
if (!isset($urls[$j]))
$urls[$j] = $page;
}
}
function extractpage($page, $reg = '//') {
$content = file_get_contents($page);
// $content = '';
preg_match_all($reg, $content, $matches);
return $matches[1];
}
function download($url, $file, $referer = '') {
$url = abs_url($url, $referer);
echo $url, "\n";
$opts = [
'http' => [
'method' => 'get',
'header' => accept-language: en\r\n .
// cookie: \r\n .
referer: . $url . \r\n
]
];
$context = stream_context_create($opts);
file_put_contents($file, file_get_contents($url, false, $context));
return $file;
}
function abs_url($url, $referer) {
$com = parse_url($url);
if (!isset($com['scheme']))
$com['scheme'] = 'http';
if ($referer !== '') {
$ref = parse_url($referer);
if (!isset($com['host'])) {
if (isset($ref['host'])) {
$com['host'] = $ref['host'];
if (!isset($ref['path']))
$ref['path'] = '/';
}
if (isset($com['path'][0])) {
if ($com['path'][0] !== '/')
$com['path'] = $ref['path'] . $com['path'];
} else if (isset($ref['host'])) {
$com['path'] = $ref['path'];
}
} else {
if (!isset($com['path']))
$com['path'] = '';
}
}
return unparse_url($com);
}
function unparse_url($com) {
return (isset($com['host']) ? ($com['scheme'] . '://' . $com['host']) : '') . $com['path'] . (isset($com['query']) ? '?'.$com['query'] : '');
}