陈奇网络工作室

帝国cms远程附件,可用于帝国cms7.5

网上很多关于帝国cms远程附件功能的方法,但是只能用于7.2版本,甚至代码中也带有错误,本研究针对于帝国cms7.5版本进行了调整,帝国cms对于seo方面的友好不是其他cms能取代的,如果实现远程附件功能,那么就可以通过远程附件的形式直接降低服务器压力,还有必要用什么OSS?虽然OSS能减轻服务器压力,但是成本和价格我感觉还是比较贵的,如果按照一个月需求500G图片流量就需要两百多,要知道,西部数码的独享云虚拟主机500G流量版的一年也才不到600元,月流量1500G的一年也才1800左右,要知道这可是月流量全年直接乘12,想省钱完全可以自己用虚拟主机拼一个图片服务器,要知道西部数码的空间容量可是额外送20%的,IDC的服务器可是自带防火墙,通过将图片服务器进行分布式管理。

声明:本方法只限用于个人学习,禁止用于盈利行为,本文也禁止转载至任何平台或个人网站,即便不是盈利目的也不允许转载,所有浏览者只有浏览权,禁止以任何形式复制,本站写作此文也只是用于学习交流,调整代码程序是专业技术,因为您私自调整程序造成的网站故障我们不负责,如果用于商业用途请到官方支付授权费用,因为官方授权版比此代码更为稳定安全,本代码具有一定缺陷,具体缺陷还需研究完善。

1:打开e\class\connect.php搜索:(大致176行)

do_dbclose($link);

在这行前插入:

eDoPostFileServer();

整体代码效果如下:

function db_close(){
	global $link;
	eDoPostFileServer();
	do_dbclose($link);
}

这一步是为了让图片上传的时候直接执行FTP上传图片模式。

2:搜索:(大致在180行)

//--------------- 公共 ---------------

在此行上方添加如下代码:

//--------------- 远程发布 ---------------      
      
//远程附件发布      
function eDoPostFileServer(){      
global $efileftp,$efileftp_fr,$efileftp_dr,$public_r;      
//此处原作者使用函数错误,导致后台错误,已由www.chenqinet.cn修复。
if(empty($public_r['openfileserver'])||!($efileftp_fr[0]||$efileftp_dr[0]))      
{      
return '';      
}      
if(!defined('InEmpireCMSFtp'))      
{      
include(ECMS_PATH.'e/class/ftp.php');      
}      
$pr=ReturnPostFtpInfo(1);      
$efileftp=new EmpireCMSFTP();      
$efileftp->fconnect($pr['ftphost'],$pr['ftpport'],$pr['ftpusername'],$pr['ftppassword'],$pr['ftppath'],$pr['ftpssl'],$pr['ftppasv'],$pr['ftpmode'],$pr['ftpouttime']);      
$basepath=$pr['ftppath'].'/';      
if($efileftp_fr[0])      
{      
$path=ReturnPostFtpFilePath(ReturnPostFtpFilename($efileftp_fr[0]));      
//$efileftp->ftp_mkdirs($basepath,$path);原作者此行代码会导致图片图片FTP后重复创建文件夹,此处已由www.chenqinet.cn修复。      
$count=count($efileftp_fr);      
for($i=0;$i<$count;$i++)      
{      
$lfile=$efileftp_fr[$i];      
$hfile=$basepath.ReturnPostFtpFilename($efileftp_fr[$i]);      
$efileftp->fTranFile($hfile,$lfile,0,0);      
}      
}      
if($efileftp_dr[0])      
{      
$dcount=count($efileftp_dr);      
for($di=0;$di<$dcount;$di++)      
{      
$dhfile=$basepath.ReturnPostFtpFilename($efileftp_dr[$di]);      
$efileftp->fDelFile($dhfile);      
}      
}      
$efileftp->fExit();      
}      
//返回发布FTP信息      
function ReturnPostFtpInfo($pid){      
global $empire,$dbtbpre;      
$r=$empire->fetch1("select * from {$dbtbpre}enewspostserver where pid='$pid'");      
return $r;      
}      
//返回远程实际文件地址      
function ReturnPostFtpFilename($file){      
$file=str_replace(ECMS_PATH,'',$file);      
$file=str_replace('../','',$file);      
$file=str_replace('d/file/','',$file);      
return $file;      
}      
//返回远程实际目录      
function ReturnPostFtpFilePath($file){      
$r=explode('/',$file);      
$count=count($r)-1;      
$path=substr($file,0,strlen($file)-strlen($r[$count])-1);      
return $path;      
}  

本程序参照7.2版本修改方法,因此方法被很多网友转载,我们已经无从查证原始作者,本文已经针对7.5版本进行修正。

此处代码的作用是实现图片上传直接通过FTP形式在图片服务器上的目标目录下创建上传的文件。

3:打开e\admin\SetEnews.php搜索

<tbody id="setfileserver" style="display:none">

将:

<tbody id="setfileserver" style="display:none">

</tbody>

替换成:

<tr>     
<td height="25" colspan="2" class="header">远程附件设置</td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">启用远程附件</td>    
<td height="25" bgcolor="#FFFFFF"><input type="radio" name="openfileserver" value="1"<?=$r['openfileserver']==1?' checked':''?> onclick="setfileserver.style.display='';">    
是     
<input type="radio" name="openfileserver" value="0"<?=$r['openfileserver']==0?' checked':''?> onclick="setfileserver.style.display='none';">    
否 </td>    
</tr>    
<tbody id="setfileserver" style="display:none">    
<tr>     
<td height="25" bgcolor="#FFFFFF">启用 SSL 连接</td>    
<td height="25" bgcolor="#FFFFFF"><input type="radio" name="fs_ftpssl" value="1"<?=$fsr[ftpssl]==1?' checked':''?>>    
是     
<input type="radio" name="fs_ftpssl" value="0"<?=$fsr[ftpssl]==0?' checked':''?>>    
否 </td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">被动模式(pasv)连接</td>    
<td height="25" bgcolor="#FFFFFF"><input type="radio" name="fs_ftppasv" value="1"<?=$fsr[ftppasv]==1?' checked':''?>>    
是     
<input type="radio" name="fs_ftppasv" value="0"<?=$fsr[ftppasv]==0?' checked':''?>>    
否 </td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">FTP服务器地址</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_ftphost" type="text" id="fs_ftphost" value="<?=$fsr[ftphost]?>" size="38">    
端口:     
<input name="fs_ftpport" type="text" id="fs_ftpport" value="<?=$fsr[ftpport]?>" size="4"></td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">FTP用户名</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_ftpusername" type="text" id="fs_ftpusername" value="<?=$fsr[ftpusername]?>" size="38">     
</td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">FTP密码</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_ftppassword" type="password" id="fs_ftppassword" size="38">     
<font color="#666666">(不修改密码请留空) </font></td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">传送模式</td>    
<td height="25" bgcolor="#FFFFFF"><input type="radio" name="fs_ftpmode" value="1"<?=$fsr[ftpmode]==1?' checked':''?>>    
ASCII     
<input type="radio" name="fs_ftpmode" value="0"<?=$fsr[ftpmode]==0?' checked':''?>>    
二进制</td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">FTP 传输超时时间</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_ftpouttime" type="text" id="fs_ftpouttime" value="<?=$fsr[ftpouttime]?>" size="38">    
秒<font color="#666666">(0为服务器默认)</font></td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">远程附件目录</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_ftppath" type="text" id="fs_ftppath" value="<?=$fsr[ftppath]?>" size="38">     
<font color="#666666">(目录结尾不要加斜杠“/”,空为根目录)</font></td>    
</tr>    
<tr>     
<td height="25" bgcolor="#FFFFFF">远程访问地址</td>    
<td height="25" bgcolor="#FFFFFF"><input name="fs_purl" type="text" id="fs_purl" value="<?=$fsr[purl]?>" size="38">     
<font color="#666666">(结尾需加“/”,如:http://file.phome.net/)</font></td>    
</tr>    
<tr>    
<td height="25" bgcolor="#FFFFFF">测试FTP服务器</td>    
<td height="25" bgcolor="#FFFFFF"><input type="submit" name="Submit3" value="测试FTP服务器" onClick="document.form1.enews.value='CheckFileServerFtp';document.form1.action='SetEnews.php';document.form1.target='checkftpiframe';"> <font color="#666666">(无需保存设置即可测试,请在测试通过后再保存)</font>  
</td>  
</tr>  
</tbody>  

此步骤是为了实现在后台的控制面板里进行管理,帝国cms7.5添加上这串代码就可以在后台管理FTP图片上传了,不足之处就是上传图片后图片是保存在FTP上的,无法以图片文件夹形式浏览服务器上的文件,正常使用不影响,删除文章的时候也可以同步删除FTP服务器上的图片,这个功能肯定没有商业版完善,仅作为代码研究。

此外,ftp服务器如果图片满了还可以更换其他ftp继续上传,只要有足够的上传服务器基本就能实现分布使用FTP,但是无法进行分布式管理操作,因为本代码只允许单次绑定1个FTP管理。

如果你觉得本文不错,欢迎Ctrl+D收藏保存,但是千万别复制到其他网页上哦,因为本文在开头已经声明禁止任何形式转载,即便是个人学习也不行!

本文作者:陈奇 说明:本站原创,禁止一切形式转载!!!! 

相关推荐

后台-系统设置-扩展变量-手机广告位-内容页底部广告位3