求一个php长时间循环下载网站api文件不中断的方法
或者求一个可以每天下载相同任务的软件,然后放在计划任务里面可用的
主要用来下载api文件
目前我是用php的copy函数下载,下1个多小时后就下载不了了,不知道什么原因,是不是还要设置什么东东啊???
求大神帮忙~~~~~php长时间下载不中断
或者求一个可以每天下载相同任务的软件,然后放在计划任务里面可用的
主要用来下载api文件
目前我是用php的copy函数下载,下1个多小时后就下载不了了,不知道什么原因,是不是还要设置什么东东啊???
求大神帮忙~~~~~php长时间下载不中断
解决方案 »
- 我用PHP想实现用代理IP访问网站,但是测试还是用自己的IP访问的
- 如何将C#加密算法换算成PHP算法(懂C#和PHP大鸟请进)
- PHP.INI文件重新配制后如何重启生效.我是XP+PHP5
- 熟悉织梦的朋友请进!我想调用指定ID范围内的 随机一条数据!麻烦问下 怎么写代码啊
- php $_SERVER 两个参数问题 'DOCUMENT_ROOT' 'SERVER_NAME'
- php的session详细设置.(顶者散分)
- 各位帮我看看这段代码,怎么运行后是乱码?
- paypal API 一问
- 简单而又让我头疼的问题
- [class]fileupload,已有功能:检查文件扩展名,文件大小,批量上传。适用版本,php4.2以上
- php如何在array()的括号里面写入一个数组的值
- 关于foreach输出问题
header("content-type:text/html;charset=utf-8");
set_time_limit(0);
$curl = curl_init();
$target_file = 'ftp://IP:端口/'.date("Ymd",time()).'.sql';
curl_setopt($curl,CURLOPT_URL,$target_file);
curl_setopt($curl, CURL_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);
curl_setopt($curl,CURLOPT_TIMEOUT,300);
curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");$target_path = 'D:/backup/';
if(is_dir($target_path)){
$outfile = fopen($target_path.'/'.date("Ymd",time()).'.sql',"w+");
curl_setopt($curl,CURLOPT_FILE,$outfile);
$info = curl_exec($curl);
fclose($outfile);
$error_no = curl_errno($curl);
if($error_no === 0){
echo "下载成功!";
}else{
echo "下载失败!";
}
curl_close($curl);
}学CURL的时候写的一个下载服务器上备份数据库的小程序。添加个计划任务访问这个页面实现下载。
您好,谢谢您的解答
说明下,下载的单个文件不是很大,只有几兆-30兆之间
主要是文件有600多个,导致长时间下载程序中断了
之前是有做个数据库来保存下载记录用于判断,但是是分多次执行完成的
有没有什么方法,可以一次性执行完成
或者有什么软件可以实现这样的功能
很抱歉我还没听说过有这样的软件... 很多码农和我一样在面对复杂需求的死后喜欢自己写个代码来跑....就用你的方法不是挺好么 用数据库保存下下载记录,每次下载固定个数,下次执行时从未记录处开始继续下载,然后跑计划任务或者wget即可
我下载的是别人服务器上的api文件没ftp
刚用您的程序试了下,好像不能下载,不知道是不是我改的有错,您帮忙看下header("content-type:text/html;charset=utf-8");
set_time_limit(0);
$curl = curl_init();
$target_file = 'http://www.meituan.com/api/v2/changle/deals';//这样的文件有600多个
curl_setopt($curl,CURLOPT_URL,$target_file);
curl_setopt($curl, CURL_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);
curl_setopt($curl,CURLOPT_TIMEOUT,300);
curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");
$target_path = '';
if(is_dir($target_path)){
$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");
curl_setopt($curl,CURLOPT_FILE,$outfile);
$info = curl_exec($curl);
fclose($outfile);
$error_no = curl_errno($curl);
if($error_no === 0){
echo "下载成功!";
}else{
echo "下载失败!";
}
curl_close($curl);
}
我下载的是别人服务器上的api文件没ftp
刚用您的程序试了下,好像不能下载,不知道是不是我改的有错,您帮忙看下header("content-type:text/html;charset=utf-8");
set_time_limit(0);
$curl = curl_init();
$target_file = 'http://www.meituan.com/api/v2/changle/deals';//这样的文件有600多个
curl_setopt($curl,CURLOPT_URL,$target_file);
curl_setopt($curl, CURL_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);
curl_setopt($curl,CURLOPT_TIMEOUT,300);
curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");
$target_path = '';
if(is_dir($target_path)){
$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");
curl_setopt($curl,CURLOPT_FILE,$outfile);
$info = curl_exec($curl);
fclose($outfile);
$error_no = curl_errno($curl);
if($error_no === 0){
echo "下载成功!";
}else{
echo "下载失败!";
}
curl_close($curl);
}
用readdir遍历下目录,循环执行下载就行了,反正用set_time_limit(0);设置了脚本执行时间无限制,你所有文件估计有6G以上吧。
我下载的是别人服务器上的api文件没ftp
刚用您的程序试了下,好像不能下载,不知道是不是我改的有错,您帮忙看下header("content-type:text/html;charset=utf-8");
set_time_limit(0);
$curl = curl_init();
$target_file = 'http://www.meituan.com/api/v2/changle/deals';//这样的文件有600多个
curl_setopt($curl,CURLOPT_URL,$target_file);
curl_setopt($curl, CURL_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_FTP_USE_EPSV, 0);
curl_setopt($curl,CURLOPT_TIMEOUT,300);
curl_setopt($curl, CURLOPT_USERPWD, "update:windcms");
$target_path = '';
if(is_dir($target_path)){
$outfile = fopen($target_path.'/'.date("Ymd",time()).'.xml',"w+");
curl_setopt($curl,CURLOPT_FILE,$outfile);
$info = curl_exec($curl);
fclose($outfile);
$error_no = curl_errno($curl);
if($error_no === 0){
echo "下载成功!";
}else{
echo "下载失败!";
}
curl_close($curl);
}
用readdir遍历下目录,循环执行下载就行了,反正用set_time_limit(0);设置了脚本执行时间无限制,你所有文件估计有6G以上吧。
嗯,是的,差不多有5G左右
还有一点,目前是在计划任务里面,添加批处理的方式打开程序,然后执行10秒后自动关闭掉进程,但是程序还是有执行下载1个多小时后才中断,这样对服务器会有什么影响吗?
这类问题不是具体的某个语句的问题,所以我只能说我的思路无法保证这样就一定能行或者是最好的你可以copy之前和copy完完之后再数据库写两个开始/结束标志 在php文件copy之前检查上一个程序是否执行完毕,如果没有就退出,如果有,就写上开始标志开始copy这样根本不存在执行一个多小时的问题吧...
还有一点,目前是在计划任务里面,添加批处理的方式打开程序,然后执行10秒后自动关闭掉进程,但是程序还是有执行下载1个多小时后才中断,这样对服务器会有什么影响吗?
这类问题不是具体的某个语句的问题,所以我只能说我的思路无法保证这样就一定能行或者是最好的你可以copy之前和copy完完之后再数据库写两个开始/结束标志 在php文件copy之前检查上一个程序是否执行完毕,如果没有就退出,如果有,就写上开始标志开始copy这样根本不存在执行一个多小时的问题吧...您好,执行一个小时是因为下载的文件数量太多了,因为我是循环下载的,下载到哪里停下,下次就从哪里再下载
因为我没用过wget,所以请教下
另外:如果想尽快下载的话,可以考虑不用PHP,使用PHP把抓取到得待采集文件地址入库,导出成列表。导入到迅雷或者其他下载软件进行批量下载,话说这个方法也试过,还不错
您好,谢谢您的解答
第一种方法是用cmd执行php文件吗?如果是的话,我试过用cmd来处理网页也会超时的啊,不知道是不是我的方法不对,如果不是的话要怎么弄呢?
第二种用迅雷的话,要怎么做才能够每天都运行一次呢?因为我下载的链接是相同的,只是内容每天都有更新,但是迅雷下载完后好像不能重复下载,请教下这个要怎么设置?
php d:\wwwroot\cmd\task.php
pause
这个task.php就是你用HTTP访问网页来执行任务的文件。把这个保存为.bat文件。双击执行即可,也可以加入到计划任务中,每天执行。
wget 或其他命令行客户端有检测跳过(或续传,续传一般建立在字节数固定的情况)的功能如果想自动化,建议用log,记录仪下载完成的或出错的
循环N次,跳过完成的,重新下载出错的,直到log内记录全部都完成
或者log只记录出错的,循环下载直到log记录为0