注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

PHPCMSV9二次开发之----FTP图片上传  

2012-12-04 12:01:59|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一 FTP图片上传
    这里其它话不多说,我们直接进入主题。在PHPCMSV9 内容编辑里有一个文件(图片)上传的功能,如下图:
PHPCMSV9二次开发之----FTP图片上传 - fc_lamp - @fc_lamp


但是不支持FTP图片上传。因此,我们这里要改造一下,让其支持FTP上传。 根据URL请求,我们知道点击“上传到服务器上”后请求的模型为附件模型,即:?m=attachment&c=attachments&a=upload 那么找到相应的PHP文件(/phpcms/modules/attachment/attachments.php)。我们先不修改此文件,我们先创建好相应的配置文件。 根据PHPCMSV9的开发规范,我们在 (/caches/configs/) 此路径下,创建了一个ftp的配置文件(ftp.php)。

<?php
return array (
//ftp host
'ftphost' => 'xxx',
//ftp 用户名
'ftpuser' => 'xxxx',
//ftp 密码
'ftppwd' => 'xxxx',
//ftp 目录
'ftpdir' => '/xxxx/',
//ftp 端口
'ftpport' => 'xxxx',
//图片的根URL (如果你这里还多个图片服务器,可以rand()一下,随机使用一个URL地址)
'base_url' => 'http://xxx.xxx.com',
//如果需要缩略图 宽
'thumb_w'=>100,
//如果需要缩略图 高
'thumb_h'=>100
);

ftp配置文件设置好后,我们来修改attachments.php文件(下面的代码我只截取我修改过的):

class attachments
{
private $att_db;
function __construct()
{
pc_base::load_app_func ( 'global' );
$this->upload_url = pc_base::load_config ( 'system', 'upload_url' );
$this->upload_path = pc_base::load_config ( 'system', 'upload_path' );
//fc_lamp:载入ftp 配置
$this->ftp_config = pc_base::load_config ( 'ftp' );
$this->imgext = array ('jpg', 'gif', 'png', 'bmp', 'jpeg' );
$this->userid = param::get_cookie ( 'userid' ) ? param::get_cookie ( 'userid' ) : param::get_cookie ( '_userid' );
$this->isadmin = $this->admin_username = $_SESSION ['roleid'] ? 1 : 0;
$this->groupid = param::get_cookie ( '_groupid' ) ? param::get_cookie ( '_groupid' ) : 8;
}

/**
* 常规上传
*/
public function upload()
{
$grouplist = getcache ( 'grouplist', 'member' );
if ($this->isadmin == 0 && ! $grouplist [$this->groupid] ['allowattachment'])
return false;
pc_base::load_sys_class ( 'attachment', '', 0 );
$module = trim ( $_GET ['module'] );
$catid = intval ( $_GET ['catid'] );
$siteid = $this->get_siteid ();
$site_setting = get_site_setting ( $siteid );
$site_allowext = $site_setting ['upload_allowext'];
$attachment = new attachment ( $module, $catid, $siteid );
$attachment->set_userid ( $this->userid );
//fc_lamp:上传原图
$a = $attachment->upload ( 'upload', $site_allowext);
//fc_lamp: 上传FTP
if ($a)
{
$filepath = $attachment->uploadedfiles [0] ['filepath'];
//本地原图
$local_file_path = $this->upload_path . $filepath;
//目标缩略图
$filethumbpath = explode ( '.', $filepath );
$filethumbpath = reset ( $filethumbpath ) . '_m.' . end ( $filethumbpath );
$local_file_thumb_path = $this->upload_path . $filethumbpath;

$fn = intval ( $_GET ['CKEditorFuncNum'] );
$this->upload_json ( $a [0], $filepath, $attachment->uploadedfiles [0] ['filename'] );

//载入FTP类
pc_base::load_sys_class ( 'ftps' );
$ftp = new ftps ();
$ftp->connect ( $this->ftp_config ['ftphost'], $this->ftp_config ['ftpuser'], $this->ftp_config ['ftppwd'], $this->ftp_config ['ftpport'], True );
$ftp_file_path = $this->ftp_config ['ftpdir'] . $filepath;
$ftp_file_thumb_path = $this->ftp_config ['ftpdir'] . $filethumbpath;
$ftp_file_url = $this->ftp_config ['base_url'] . $ftp_file_path;
//上传原图
if ($ftp->put ( $ftp_file_path, $local_file_path ))
{
//上传缩略图
$img = new image ( True );
$img->thumb ( $local_file_path, $local_file_thumb_path, $this->ftp_config ['thumb_w'], $this->ftp_config ['thumb_h'] );
$ftp->put ( $ftp_file_thumb_path, $local_file_thumb_path );

//删除本地文件(以及)缩略图
unlink ( $local_file_path );
@unlink ( $local_file_thumb_path );

//显示在前端页面上
$attachment->mkhtml ( $fn, $ftp_file_url, '' );
} else
{
//删除本地文件
unlink ( $local_file_path );
//FTP无法上传
$error = $ftp->get_error ();
$this->echo_tip_js ( $error );
}
} else
{
//本地都无法上传时
$error = $attachment->error ();
$this->echo_tip_js ( $error );
}
}

/**
*
* fc_lamp:输出错误提示,JS代码
*/
private function echo_tip_js($error)
{
echo <<<EOD
<script type="text/javascript">
alert('$error')
</script>
EOD;
die ();
}

好了,这样就简单的完成了FTP图片上传这个功能。不过在图片上传完后保存文章时要注意,要关闭PHPCMSV9 内容字段的自动保存图片的功能,不然内容里的图片地址 会被替换掉。







  评论这张
 
阅读(589)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017