- 浏览: 68814 次
- 性别:
- 来自: 南京
文章分类
最新评论
(在线文库系统)centos+nginx+mysql+php+openoffice+pdf2swf+pdf2image架构方案
总体架构:
前端web服务器+数据库服务器+文件转换服务器+文件存储服务器
总体描述:
前端web页面上传文件,后端程序将数据写入mysql,并将文件发送到文件服务器,文件服务器定时查询mysql取出需要转换文件列表,用php脚本调用linux命令执行转换文件操作,转换完成后将数据库对应记录更新,并将文件发送到文件存储服务器。
<!--more-->一.将文件发送到文件转换服务器
- web端
php通过curl发送文件
- 文件转换服务器
搭建一个web服务,只需要2个东东:upload.php、uploads文件夹
upload.php代码如下:
<?php
define('MY_ROOT', str_replace('/upload.php', '', str_replace('\\', '/', __FILE__)));
if(isset($_FILES)){
if(isset($_FILES['file'])){
try {
move_uploaded_file($_FILES['file']['tmp_name'], MY_ROOT.'/uploads/'.$_FILES['file']['name']);
@unlink($GLOBALS[$_FILES['file']['tmp_name']]);
echo json_encode(array('success'=>TRUE,'error'=>''));
} catch (Exception $exc) {
//echo $exc->getTraceAsString();
echo json_encode(array('success'=>FALSE,'error'=>'移动文件失败'));
}
}
}
?>
二.文件转换php脚本核心代码如下
#!/usr/local/php.old/bin/php -q
<?php
date_default_timezone_set('PRC');
error_reporting(E_ALL);
/* 取得当前所在的根目录 */
define('MY_ROOT', str_replace('/setup.php', '', str_replace('\\', '/', __FILE__)));
include_once(MY_ROOT."/include/lib_mysql.php");//mysql操作类
require_once(MY_ROOT.'/include/aliyun/aliyun.php');
include_once(MY_ROOT."/config.php");
use \Aliyun\OSS\OSSClient;
$client = OSSClient::factory(array(
'AccessKeyId' => $AccessKeyId,
'AccessKeySecret' => $AccessKeySecret,
));
$db = new lib_mysql($db_host, $db_user, $db_pass, $db_name);
while (true){
$sql = "select aid,softlinks from t_addonbook where wwk=0 ";
$list = $db->getAll($sql);
//循环处理需要转换的文档
foreach($list as $item){
//获取源文档的上传路径
$local_path = $item['softlinks'];//{dede:link islocal='1' text='本地下载'} /uploads/userup/1088/9-30.xls {/dede:link}
$tmp_str = strpos($local_path, '}')+1;
$local_path = substr($local_path, $tmp_str);//去除 {dede:link islocal='1' text='本地下载'}
$tmp_str = strpos($local_path, '{/dede:link}');
$local_path = substr($local_path, 0, $tmp_str);//去除 {/dede:link}
$local_path = str_replace(" ", "", $local_path);
$local_file_name = basename($local_path);//文件名+扩展名
$file_name_arr = explode(".", $local_file_name);
$file_name = $file_name_arr[0];
$file_type = end($file_name_arr);
$file_type = strtolower($file_type);
$tmp_name_str = strpos($local_path, $local_file_name);
$local_path = substr($local_path, 0,$tmp_name_str);//去除文件名
if(file_exists($upload_path.$local_file_name)){
if(copy($upload_path.$local_file_name, $convert_path.$local_file_name)){//将文件
//将文件转换为pdf
$start = time();
if($file_type=='txt'){
if(!isUTF8($convert_path.$local_file_name)){//若不是UTF8编码,则转码
$temp = exec("enca -i ".$convert_path.$local_file_name);
if(strrpos($temp, '???') === false){//是gbk
exec("iconv -f gbk -t utf-8 ".$convert_path.$local_file_name." -o ".$convert_path.$local_file_name);//txt 转码
}else{
exec("iconv -f unicode -t utf-8 ".$convert_path.$local_file_name." -o ".$convert_path.$local_file_name);//txt 转码
}
}
}
if($file_type!='pdf'){
exec($openoffice_path." -f pdf ".$convert_path.$local_file_name);//转换为pdf
}
//生成缩略图
exec("cd ".$pdfimg_path);
$temp = exec("cd ".$pdfimg_path."&& ./pdf2img -f 1 -w 150 -h 200 ".$convert_path.$file_name.".pdf ".$convert_path.$file_name.".jpg");
//生成swf
$temp = exec($swftools_path." -f -T 9 -t ".$convert_path.$file_name.".pdf -o ".$convert_path.$file_name.".swf");
if(strrpos($temp, 'NOTICE') === false){//第一种那个方式转换失败
//第二种转换方式
$temp = exec($swftools_path." -f -T 9 -t -s poly2bitmap ".$convert_path.$file_name.".pdf -o ".$convert_path.$file_name.".swf");
}
echo "1->".$item['aid'].' : ';print_r($temp);echo "\n";
//获取pdf总页数
$pagenum = getPageTotal($convert_path.$file_name.".pdf");
if(!file_exists($convert_path.$file_name.".jpg")){//jpg
exec($mv_path."mv ".$convert_path.$file_name."0001.jpg ".$convert_path.$file_name.".jpg");
}
//将swf,jpg和源文件拷贝到文件服务器
/*上传swf*/
$client->putObject(array(
'Bucket' => 'bucket-wenku',
'Key' => $file_name.'.swf',
'Content' => fopen($convert_path.$file_name.'.swf', 'r'),
'ContentLength' => filesize($convert_path.$file_name.'.swf'),
));
/*上传jpg*/
$client->putObject(array(
'Bucket' => 'bucket-wenku',
'Key' => $file_name.'.jpg',
'Content' => fopen($convert_path.$file_name.'.jpg', 'r'),
'ContentLength' => filesize($convert_path.$file_name.'.jpg'),
));
/*上传源文件*/
$client->putObject(array(
'Bucket' => 'bucket-wenku',
'Key' => $local_file_name,
'Content' => fopen($convert_path.$local_file_name, 'r'),
'ContentLength' => filesize($convert_path.$local_file_name),
));
//写入数据库
//$onlineviewurl = '/swf/'.$file_name.'.swf';
$onlineviewurl = '/load.php?file='.$file_name.'.swf';
$sql = "update t_addonbook set onlineviewurl='$onlineviewurl',wwk=1,pagenumber=$pagenum where aid=$item[aid]";
$db->query($sql);
//$litpic = '/swf/'.$file_name.'.jpg';
$litpic = '/load.php?file='.$file_name.'.jpg';
$sql = "update t_archives set litpic='$litpic' where id=$item[aid]";
$db->query($sql);
//删除文件
exec("rm -rf ".$convert_path.$file_name."*");
//删除上传目录文件
exec("rm -rf ".$upload_path.$local_file_name);
}else{
//复制文件失败
}
}else{
//写入错误日志
}
sleep(1);
}
echo "5\n";
sleep(5);
}
/**
* 获取PDF的页数
*/
function getPageTotal($path){
// 打开文件
if (!$fp = @fopen($path,"r")) {
return false;
}
else {
$max=0;
while(!feof($fp)) {
$line = fgets($fp,255);
if (preg_match('/\/Count [0-9]+/', $line, $matches)){
preg_match('/[0-9]+/',$matches[0], $matches2);
if ($max<$matches2[0]) $max=$matches2[0];
}
}
fclose($fp);
// 返回页数
return $max;
}
}
function isUTF8($str)
{
$str1 = file_get_contents($str);
$code = chkCode($str1);
if($code=='UTF-8'){
return TRUE;
}else{
return FALSE;
}
}
function chkCode($string){
$code = array('UTF-8','GBK','GB18030','GB2312');
foreach($code as $c){
if( $string === iconv('UTF-8', $c, iconv($c, 'UTF-8', $string))){
return $c;
}
}
return "no";
}
?>
github上面看到也有其他方法: https://github.com/yoozi/swf-docs-generator
转载自:http://www.9958.pw/post/wenku
发表评论
-
项目管理之如何控制项目进度和质量
2016-07-16 22:37 606控制项目进度和质量首先在整体上要有一个合理清晰的流程,并且在整 ... -
15 个非常棒的 CSS3 效果教程
2016-07-03 20:42 5881. 创建一个漂亮的图标 这个教程将教你如何用纯 C ... -
前20名的不安全密码(需要避免)
2016-07-01 21:41 514下图举例说明了一些人们作出选择密码时最常用的错误,以及如何使你 ... -
js实现图片放大缩小后进行的复杂排序
2016-06-30 21:57 584首先,我们来讲下需求: 1.图片分为大小和小图,大图占四个小 ... -
史上最全ajax(原生JS,javascript版,非jquery)详细注释!
2016-06-29 22:31 810史上最全ajax详细注释!(原生JS,javascript版, ... -
php千万级pv架构经验分享
2016-06-28 22:04 1294转载自:http://www.9958.pw/post/ph ... -
ecshop 时间问题请注意 /data/config.php
2016-06-27 22:43 866ecshop 处理时间,绕来绕去, 后台的时区设置, 并非以 ... -
目前比较流行的二维码的生成
2016-06-26 23:55 584最近比较流行二维码,自己百度了一下发现有一个很不错的实现方法使 ... -
如何阻止移动设备(手机,pad)浏览器双击放大网页?
2016-06-24 22:29 1214现在的手机或平板电脑等移动设备上的浏览器默认都有双击放大的设置 ... -
PHP解决Xss跨域攻击以及sql注入等危险字符串方案类库
2016-06-19 21:45 778由于该模块在项目中的要求是 不能提示任何信息,也不作断点操作, ... -
网站敏感骂人词库及算法(附6仟个敏感词)
2016-06-16 22:07 5885原文:「我今天开着张三丰田去上班 」 strtr:「我今天开 ... -
jQuery制作元素在屏幕中水平垂直居中效果
2016-06-14 21:56 599jQuery.fn.center = function () ... -
纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
2016-06-11 21:32 9761、正方形 CSS代码如下: #square { widt ... -
分享一个JQuery写的点击上下滚动的小例子
2016-06-08 22:00 502效果图 演示地址 源码下载 <!--more--> ... -
精美的国外扁平化网页设计作品
2016-06-05 16:02 598Who Wanna <!--more--> ... -
提交您的博客到各大网站
2016-06-03 21:04 381各大搜索引擎网站登录入口: Google收录入口:http:/ ... -
推荐7个 CSS3 制作的创意下拉菜单效果
2016-06-02 22:15 4021. 使用 jQuery 和 CSS3 制作向下滑动的导航菜单 ... -
Dev Http Client(Chrome的HTTP插件)
2016-05-31 22:34 755Dev Http Client(Chrome的HTTP插件) ... -
好的用户界面-界面设计的一些技巧
2016-05-29 16:24 4021 尽量使用单列而不是 ... -
项目组制定的一份页面优化指南
2016-05-27 21:40 3641.文档声明 文档声明必须置于网页的HTML部分的最开始,标签 ...
相关推荐
CentOS+Nginx+PHP+MySQL 配置详解 在本文中,我们将详细介绍如何在 CentOS 平台上安装和配置 Nginx、PHP 和 MySQL,实现一个完整的 Web 服务器环境。 一、Nginx 介绍 Nginx 是一个高性能的 HTTP 和反向代理服务器...
(CentOS+Nginx+PHP+Mysql)配置和WEB服务器安全配置方案[收集].pdf
(CentOS+Nginx+PHP+Mysql)配置和WEB服务器安全配置方案[借鉴].pdf
在本配置文档中,我们将详细讨论如何在 CentOS 系统上搭建一个基于 Nginx、FastCGI 和 MySQL 的服务器环境。这个配置过程涉及到多个步骤,包括安装必要的软件包、配置 Nginx 以及整合 PHP 和 MySQL。 首先,我们...
### CentOS+Nginx+PHP+MySQL 详细配置解析 #### 一、理解 Nginx 及其重要性 Nginx 是一款轻量级、高性能的 Web 服务器及反向代理服务器,它同样具备 IMAP/POP3/SMTP 代理服务功能。这款由俄罗斯开发者 Igor Sysoev...
【标题】:“CentOS+Nginx+PHP+MySQL详细配置(图解)1” 【描述】:“1、安装libpng 3、安装 freetype 4、安装fontconfig 5、安装GD” 这篇教程主要介绍了在 CentOS 系统上搭建一个包含 Nginx、PHP 和 MySQL 的 web...
【CentOS+Nginx+PHP+Mysql配置和WEB服务器安全配置方案】 在构建一个基于Linux(如CentOS)的Web服务器时,采用Nginx作为反向代理和静态文件服务器,PHP作为后端处理动态内容,以及Mysql作为数据库存储,是一种常见...
本文将详细介绍如何在CentOS系统上安装并配置Django Web框架及其相关组件(Nginx、MySQL、uWSGI等),以及如何关闭CentOS 7的防火墙以确保服务正常运行。 #### 二、基础环境准备 **1. 安装必要的库和工具** 在...
本教程将详细介绍如何在阿里云服务器上配置一个CentOS系统,然后安装Nginx作为反向代理服务器,以及Gunicorn作为WSGI服务器,最后集成Python和Flask来实现一个完整的Web服务环境。 首先,确保你的阿里云服务器是...
CentOS7 自动化搭建Nginx+PHP7+Mysql+Docker+Docker-Compose Shell脚本,Docker version 18.06.1-ce,docker-compose version 1.22.0
阿里云CentOS+Nginx+uWsgi+Django部署Django,《用Django全栈开发》系列文章最后一篇,感兴趣的同学可以查看。
这个组合将Linux操作系统作为基础,结合Nginx作为Web服务器,PHP作为后端脚本语言,以及MySQL作为关系型数据库,构建了一个高效稳定的网站运行环境。 首先,我们来看Linux操作系统,它是开源的、免费的类Unix系统,...
CentOs5.5+mysql+nginx+php5.3.3安全安装手册.doc
CentOS+Nginx环境搭建教程.pdf
### Cacti监控服务器配置教程:基于CentOS+Nginx+MySQL+PHP环境搭建 #### 环境准备与配置 在开始Cacti监控服务器的配置之前,我们需要确保所有必要的软件和服务都已正确安装并运行。本教程将详细介绍如何在CentOS ...
Linux CentOS下搭建DNS+squid+nginx+mysql高可用web服务器.zip
### CentOS+Nginx+PHP+MySQL标准生产环境配置方法 #### 概述 本文将详细介绍如何在CentOS系统上配置一套高效稳定的生产环境,包括Nginx作为Web服务器、PHP处理动态页面请求、MySQL作为数据库服务,以及安装一系列...
本教程由宋正河创作,主要针对CentOS 6.2操作系统,搭配Nginx 1.2.0、MySQL 5.5.3和PHP 5.4.3的版本进行详细讲解。以下是对这个环境搭建过程的详尽解析: 首先,我们需要了解Linux,特别是CentOS 6.2,这是一个基于...
CentOS 6.2+Nginx+mysql