火车头采集器对接织梦cms图集发布时, 采集网上图片超时的解决方法
背景介绍:
问题分析:
折中方案:
修改php代码:
function GetCurContentAlbum($body, $rfurl, &$firstdd)
{
global $dsql,$cfg_multi_site,$cfg_basehost,$cfg_ddimg_width;
global $cfg_basedir,$pagestyle,$cuserLogin,$cfg_addon_savetype;
$begin_time = time();
require_once(DEDEINC.'/dedecollection.func.php');
if(empty($cfg_ddimg_width)) $cfg_ddimg_width = 320;
$rsimg = '';
$cfg_uploaddir = $GLOBALS['cfg_image_dir'];
$cfg_basedir = $GLOBALS['cfg_basedir'];
$basehost = 'http://'.$_SERVER['HTTP_HOST'];
//$img_array = array();
//echo "<br />body: ".$body;
preg_match_all("/(src)=[\"|'| ]{0,}(http:\/\/([^>]*)\.(gif|jpg|png))/isU",$body,$img_array);
$img_array = array_unique($img_array);
//echo "<br />";
//print_r($img_array);
$imgUrl = $cfg_uploaddir.'/'.MyDate($cfg_addon_savetype, time());
$imgPath = $cfg_basedir.$imgUrl;
if(!is_dir($imgPath.'/'))
{
MkdirAll($imgPath,$GLOBALS['cfg_dir_purview']);
CloseFtp();
}
$milliSecond = 'co'.dd2char( MyDate('ymdHis',time())) ;
foreach($img_array as $key=>$value)
{
for ($i = 0; $i < count($value); $i++)
{
$now_time = time();
if ($now_time - $begin_time >= 28) {
//已经执行了28秒, 很快就超时了, 不再获取其他外部资源, 避免超时
return $rsimg;
}
$value1 = $value[$i];
$value1 = trim($value1);
$value1 = str_replace("src='", "", $value1);
$value1 = str_replace("src=", "", $value1);
$value1 = str_replace("src=\"", "", $value1);
echo "<br />download img from web: ".$value1;
if(preg_match("#".$basehost."#i", $value1) || !preg_match("#^http:\/\/#i", $value1)
|| ($cfg_basehost != $basehost && preg_match("#".$cfg_basehost."#i", $value1)))
{
//echo "<br />continue;";
continue;
}
$itype = substr($value1, -4, 4);
if( !preg_match("#\.(gif|jpg|png)#", $itype) ) $itype = ".jpg"; $rndFileName = $imgPath.'/'.$milliSecond.'-'.$key.'-'.$i.$itype;
$iurl = $imgUrl.'/'.$milliSecond.'-'.$key.'-'.$i.$itype;
//echo "<br /> iurl:".$iurl; //下载并保存文件
$rs = DownImageKeep($value1, $rfurl, $rndFileName, '', 0, 30);
if($rs)
{
$info = '';
$imginfos = GetImageSize($rndFileName, $info);
$fsize = filesize($rndFileName);
$filename = $milliSecond.'-'.$key.$itype;
//保存图片附件信息
$inquery = "INSERT INTO `#@__uploads`(arcid,title,url,mediatype,width,height,playtime,filesize,uptime,mid)
VALUES ('0','$filename','$iurl','1','{$imginfos[0]}','$imginfos[1]','0','$fsize','".time()."','".$cuserLogin->getUserID()."'); ";
$dsql->ExecuteNoneQuery($inquery);
$fid = $dsql->GetLastID();
AddMyAddon($fid, $iurl);
if($pagestyle > 2)
{
$litpicname = GetImageMapDD($iurl, $cfg_ddimg_width);
}
else
{
$litpicname = $iurl;
}
if(empty($firstdd) && !empty($litpicname))
{
$firstdd = $litpicname;
if(!file_exists($cfg_basedir.$firstdd))
{
$firstdd = $iurl;
}
}
@WaterImg($rndFileName, 'down');
$rsimg .= "{dede:img ddimg='$litpicname' text='' width='".$imginfos[0]."' height='".$imginfos[1]."'} $iurl {/dede:img}\r\n";
}
}
}
return $rsimg;
}
火车头采集器对接织梦cms图集发布时, 采集网上图片超时的解决方法的更多相关文章
- dedecms织梦手机端文章内容页图片不能自适应解决方法
dedecms织梦手机端文章内容页图片不能自适应解决方法: 方法一修改手机端文章页模板代码: 找到并打开手机端的文章内容页模板,将里面的{dede:field.body/}标签修改一下,改为如下的标签 ...
- 织梦dedecms模板制作时,循环递增autoindex使用方法整理
文章转载:http://www.maihui123.com/dedecms/2012051964.html 织梦dedecms模板制作时,我们需要每循环一次,变量加一,这是就需要使用到autoinde ...
- 织梦DedeCMS调用二级子栏目或者多级栏目解决方法
本文是关于织梦DedeCMS调用多级子栏目的,拿来测试分享下.DEDECMS v5.7,后台已建栏目目录,如下图1所示: 图1 DEDECMS后台栏目结构 现在,我们先来调用顶级栏目"站长新 ...
- 织梦dedecms手机版上下篇链接错误的解决方法
打开 \include\arc.archives.class.php 1. 找到 $this->PreNext['pre'] = "上一篇:<a href='$mlink'> ...
- DEDE织梦 后台特别卡,有时响应超时的解决办法
跟大家一样,大致情况是: 1.打开后台首页第一次没问题,但是刷新或者点其他菜单就一直卡着了. 2.关掉浏览器重新进首页没问题,但是一旦进了首页再打开php页面就卡死了. 3.服务器返回Maximum ...
- 织梦cms网上复制图片不可用的解决方法
背景描述: 织梦cms采集图片集时, 需要使用织梦cms提供的"网上复制图片"的功能, 好像我这里这个功能一直不可用, 今天下定决心研究了下源代码并进行了适当修改, 将我的修改提供 ...
- 如何更换织梦cms系统的网站小图标
织梦cms建站现在已经是很普遍的建站方式了,下面小编就分享一个简单的换网站小图标的方法! 一.登录自己网站的后台管理系统.在不修改织梦后台的情况下,默认的url是自己的网站后台dede目录下访问. 二 ...
- 记一次织梦cms渗透测试
记一次织梦cms渗透测试 0x01 前言 本次测试的整个流程:枚举用户名-针对性暴破-登录后台-后台编辑php文件getshell. 0x02 过程 1.登录功能模块存在用户名枚举缺陷,利用此权限先枚 ...
- 织梦cms、帝国cms、PHPcms优缺点解析
php才是建站的主流,cms这类程序又是用的最多的,占据主流的cms主要就是织梦,帝国,phpcms这三种的,这三个程序都是开源程序.国内用户众多. 一.从美观性来说(以官方默认模版为准 ph ...
随机推荐
- 身份证号码的正则表达式及验证详解(JavaScript,Regex)
简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...
- Net 面试随想
佳节已去,至今已半月有余,近来园中唱衰net的声音幽幽而起,net不成熟的大环境一直被作为诟病,net core的跨平台去年抄的火热,是否为net 崛起的最后一根稻草,结合我面试的情况,作为小白,嘟囔 ...
- Oracle数据文件丢失,数据库如何打开或恢复
(一)如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失.SQL>startup mount--ARCHIVELOG模式命令SQL>Alter database datafile ...
- c#多线程同步之lock
一提起lock,想必大家都很熟悉,因为它易用,顾名思义,就是一把锁,常用于多线程的同步,一次只允许一个线程进入.最近遇到一个很诡异的bug. private static readonly objec ...
- Android OpenGL ES 开发(九): OpenGL ES 纹理贴图
一.概念 一般说来,纹理是表示物体表面的一幅或几幅二维图形,也称纹理贴图(texture).当把纹理按照特定的方式映射到物体表面上的时候,能使物体看上去更加真实.当前流行的图形系统中,纹理绘制已经成为 ...
- k60引脚图
/*! 枚举管脚编号 */ typedef enum { /* PTA端口 */ //0~31 PTA0, PTA1, PTA2, PTA3, PTA4, PTA5, PTA6, PTA7, PTA8 ...
- 【Unity3D与23种设计模式】单例模式(Singleton)
GoF中定义: "确认类只有一个对象,并提供一个全局的方法来获取这个对象" 使用单例模式的前提 它只能产生一个对象且不能够被继承 单例模式的优点: 提供方便获取唯一对象的方法 可以 ...
- pyenv 安装
sudo yum install openssl* git clone https://github.com/yyuu/pyenv.git ~/.pyenv echo 'export ...
- 基于I2C总线的MPU6050学习笔记
MPU6050学习笔记 1. 简述 一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU60 ...
- SpringBoot 自定义Banner
在2016年的最后一天,借用Spring Boot的Banner向各位程序猿同仁们问候一声:Happy New Year. 接下来我们就来介绍一下这个轻松愉快的自定义banner功能.实现的方式非常简 ...