近期解决问题经历和感悟
2014-10-23 17:04
253 查看
上周四发表了一篇日志《一定要写的日志》,里面写了我遇到问题与解决问题痛苦经历,但具体遇到的问题没有细说。因为项目一直很忙,分身乏术,直到今天中午我终于完成了项目,解决了所有的技术问题,现在才有时间具体说一下所遇到的问题。但是既然写了,就把这两周遇到的所有难题和解决问题的经历和感受都说一下。
先说一下项目背景。
我们公司做了一套网上在线学习平台,是用c# .net开发的,用iis7部署在windows平台上,但是,领导层感觉这种方式代价太大,所以决定改用php开发,部署采用一键安装式部署,但是我们公司没有一个人用过php,我们都是用c# .net 开发。
经过领导们商议,将任务交给了本人,项目时间截止点是10月底。我是上月(也就是9月份)23号接到的任务,接到任务后,大概用了三四天的时间将手头工作交接,在27,28号的时候,全身心研究php。
很快就放假了,我本来想在放假期间好好研究php的,但是,但是你们知道的,放假在家根本没有心思研究技术,痛痛快快的玩了7天。
放假回来了,前三天还是没有上手写程序,搭建开发环境,了解开发框架用了大概用了三四天,又用两天时间用php写了一个单表的增删改,分页,这才开始真正进行我的项目。
真正的做项目,简单的部分完成后,很快就遇到难题了。我大致把问题划分为以下几个。
①服务转换,服务转换的作用是为了把用户上传的文件,可以用flash直接播放,用的技术主要是rabbitmq,服务转换程序我们的.net版本已经做好了,并且很成熟。我要做的就是部分更改.net程序,然后用php程序向.net服务发请求,具体过程是将请求放入到rabbitmq队列中,然后由rabbitmq和.net进行通信。
②转换后的资源的预览问题,资源转换后有jpg、png、doc、docx、ppt、pptx、pdf、txt....类型,这些类型都需要预览。我们有.net版本的预览程序,我要做的就是要把.Net
程序翻译为php程序。
③在线学习flash接口实现。
在线学习flash接口实现主要是和flash端人员进行协同开发,整个过程还算顺利。
服务转换遇到了种种难题。
首先是安装rabbitmq,安装rabbitmq非常顺利,一百度一大把。
第二步利用rabbitmq向.net转换服务发送请求。
进入官方网站查看文档,以上是导航页。这么多种请求方式,看了下,第一种就是我所需要的,果断点进去查看。
重要内容如下:
1.介绍wamp原理以及重要术语Producing,queue,Consuming
英文介绍这么多,实际上就是 生产者-队列-消费者原理,在这里,我知道,我的php程序发送请求是生产者,发送的内容是消息队列,.net服务处理程序是消费者。
2.发送一个消息的具体过程
这段文字是叙述如何在写发送实例之前,必须要安装composer和amqplib。
下面一段php代码是发送实例。
问题就出现了安装composer和amqplib上。官方文档一点不详细,并且直接运行官方文档的 $ composer.phar install 语句还会报错。
安装这两个东西的注意事项我写下:
composer安装过程
①到https://getcomposer.org/ 网站下载composer安装包
②把php.ini文件中;extension=php_openssl.dll的分号去掉
③安装文件。
如果上述第②步没有做的话,必然报错。
ampqlib安装过程
①到https://github.com/videlalvaro/php-amqplib/archive/master.zip 下载amqplib压缩包
②将压缩包解压到网站根目录,注意是根目录
③创建composer.json文件到根目录内容为:
{
"require": {
"videlalvaro/php-amqplib": "2.2.*"
}
}
④在cmd下,将目录指向项目根目录(用cd命令),执行 php composer.phar
执行成功后会有如下提示:
- Installing videlalvaro/php-amqplib (v2.2.6)
Downloading: 100%
向.net程序发指令
一直失败,最后反编译.Net发送代码,写出如下php代码才成功
经过多次调试,转换服务终于顺利运行。
资源预览问题。
经过调试,png,txt,jpg,MP3,MP4等文件格式都已经可以预览,但是office文件和pdf文件不能预览。.预览office和pdf的c#代码是一致的,代码如下:
c#原理很简单,用json字符串记录 文件的分页信息,转化为字节数组并放入流中,然后循环文件并读取放入流中,最后输出流的字节数组形式。
我的第一反应是:php肯定也有流的定义,于是研究php的api,发现的确有streams文档,但是我没有找到相应.net方法。文档研究了整整一天,的确没有解决方案(哪位php大神有解决方案请告之)。
第二种思路改为将json字符串读为字节数组,将文件也读为字节数组,然后合并字节数组,最后输出字节数组。
我对这个解决方案深信不疑。认为肯定可以。但是当我发现.net输出的字节数组内容和php输出的字节数组内容不一样时,顿时心灰意冷。又苦苦挣扎了近一个小时才放弃这种思路。
第三种思路,就是用php的header直接以二进制输出,这种思路是可行的,走通了,相应php代码如下:
展示一下预览office文件效果:
“当你为一个问题愁眉不解,苦苦思索,痛苦万分的时候,这个问题已经不是问题了,因为,你迟早会解决他!”
遇到难题,只要我们不投降,总有解决方案,因为,在技术上,没有解决不了的难题。
先说一下项目背景。
我们公司做了一套网上在线学习平台,是用c# .net开发的,用iis7部署在windows平台上,但是,领导层感觉这种方式代价太大,所以决定改用php开发,部署采用一键安装式部署,但是我们公司没有一个人用过php,我们都是用c# .net 开发。
经过领导们商议,将任务交给了本人,项目时间截止点是10月底。我是上月(也就是9月份)23号接到的任务,接到任务后,大概用了三四天的时间将手头工作交接,在27,28号的时候,全身心研究php。
很快就放假了,我本来想在放假期间好好研究php的,但是,但是你们知道的,放假在家根本没有心思研究技术,痛痛快快的玩了7天。
放假回来了,前三天还是没有上手写程序,搭建开发环境,了解开发框架用了大概用了三四天,又用两天时间用php写了一个单表的增删改,分页,这才开始真正进行我的项目。
真正的做项目,简单的部分完成后,很快就遇到难题了。我大致把问题划分为以下几个。
①服务转换,服务转换的作用是为了把用户上传的文件,可以用flash直接播放,用的技术主要是rabbitmq,服务转换程序我们的.net版本已经做好了,并且很成熟。我要做的就是部分更改.net程序,然后用php程序向.net服务发请求,具体过程是将请求放入到rabbitmq队列中,然后由rabbitmq和.net进行通信。
②转换后的资源的预览问题,资源转换后有jpg、png、doc、docx、ppt、pptx、pdf、txt....类型,这些类型都需要预览。我们有.net版本的预览程序,我要做的就是要把.Net
程序翻译为php程序。
③在线学习flash接口实现。
在线学习flash接口实现主要是和flash端人员进行协同开发,整个过程还算顺利。
服务转换遇到了种种难题。
首先是安装rabbitmq,安装rabbitmq非常顺利,一百度一大把。
第二步利用rabbitmq向.net转换服务发送请求。
进入官方网站查看文档,以上是导航页。这么多种请求方式,看了下,第一种就是我所需要的,果断点进去查看。
重要内容如下:
1.介绍wamp原理以及重要术语Producing,queue,Consuming
英文介绍这么多,实际上就是 生产者-队列-消费者原理,在这里,我知道,我的php程序发送请求是生产者,发送的内容是消息队列,.net服务处理程序是消费者。
2.发送一个消息的具体过程
这段文字是叙述如何在写发送实例之前,必须要安装composer和amqplib。
下面一段php代码是发送实例。
安装这两个东西的注意事项我写下:
composer安装过程
①到https://getcomposer.org/ 网站下载composer安装包
②把php.ini文件中;extension=php_openssl.dll的分号去掉
③安装文件。
如果上述第②步没有做的话,必然报错。
ampqlib安装过程
①到https://github.com/videlalvaro/php-amqplib/archive/master.zip 下载amqplib压缩包
②将压缩包解压到网站根目录,注意是根目录
③创建composer.json文件到根目录内容为:
{
"require": {
"videlalvaro/php-amqplib": "2.2.*"
}
}
④在cmd下,将目录指向项目根目录(用cd命令),执行 php composer.phar
执行成功后会有如下提示:
- Installing videlalvaro/php-amqplib (v2.2.6)
Downloading: 100%
向.net程序发指令
一直失败,最后反编译.Net发送代码,写出如下php代码才成功
资源预览问题。
经过调试,png,txt,jpg,MP3,MP4等文件格式都已经可以预览,但是office文件和pdf文件不能预览。.预览office和pdf的c#代码是一致的,代码如下:
我的第一反应是:php肯定也有流的定义,于是研究php的api,发现的确有streams文档,但是我没有找到相应.net方法。文档研究了整整一天,的确没有解决方案(哪位php大神有解决方案请告之)。
第二种思路改为将json字符串读为字节数组,将文件也读为字节数组,然后合并字节数组,最后输出字节数组。
我对这个解决方案深信不疑。认为肯定可以。但是当我发现.net输出的字节数组内容和php输出的字节数组内容不一样时,顿时心灰意冷。又苦苦挣扎了近一个小时才放弃这种思路。
第三种思路,就是用php的header直接以二进制输出,这种思路是可行的,走通了,相应php代码如下:
$pn=$this->input->get("pn"); $rn= $this->input->get("rn"); $totalPage=$file_count; $json="{\"totalPage\":\"" . $totalPage . "\",\"fromPage\":\"" . $pn ."\",\"toPage\":\"" . ($pn + $rn) ."\"}\r\n"; header('Content-Type: application/x-shockwave-flash'); header("Content-Transfer-Encoding: binary"); echo $json;for ($i = $pn; $i < $pn + $rn; $i++) { $filename=ROOTPATH.$Dir.'/swf/'.$version.'.'.$i.'.swf'; $handle=fopen($filename,"r");//使用打开模式为r $content=fread($handle,filesize($filename));//读为二进制 //$filearr=file($filename); echo $content; } exit;
展示一下预览office文件效果:
“当你为一个问题愁眉不解,苦苦思索,痛苦万分的时候,这个问题已经不是问题了,因为,你迟早会解决他!”
遇到难题,只要我们不投降,总有解决方案,因为,在技术上,没有解决不了的难题。
相关文章推荐
- 一个不懂程序的站长解决技术问题的苦逼经历和感悟
- 调试中解决问题的经历
- 做小生意,解决生活中的问题:创业路上的成功感悟
- 解决Android程序运行且退出后却不会显示在近期任务里的问题
- 近期做东西所遇到的几个MFC恼火的问题及解决方法
- 解决Unsupported major.minor version 51.0问题的感悟
- 近期需要解决几个问题。
- 解决Unsupported major.minor version 51.0问题的感悟
- 解决Unsupported major.minor version 51.0问题的感悟
- 一次解决DB2接口文件到Oracle无法导入问题的经历
- 近期百度贴吧乱码问题的原因解析及解决方法
- 一个古怪的VISTA网络问题解决的坎坷经历
- 一个古怪的VISTA网络问题解决的坎坷经历
- 解决Unsupported major.minor version 51.0问题的感悟
- 解决近期MSN不能启动问题
- 近期要解决的4个问题
- 近期的一些学习--当一个程序开发到了中期,突然出现性能问题,如何解决
- 近期关于NSIS方面的问题解决方法
- 一次解决DB2接口文件到Oracle无法导入问题的经历 推荐
- 三年IT经验的感悟之解决问题才是王道