windows下构建基于web的Blast服务
互联网
本篇文章主要介绍windows如何使用PHP建立PHP服务。 首先讨论一下设计思路
代码示例(很早以前写的,供参考)<?php #准备输入文件 $seq_type=$_POST['seqType']; $file_name=mt_rand(); $uploadfile="../temp/" . $file_name . ".fa"; $out_file="../temp/" . $file_name . ".out"; if($seq_type=="file"){ move_uploaded_file($_FILES['seqFile']['tmp_name'], $uploadfile); $upload_state=$_FILES['upfile']['error']; }elseif($seq_type=="text"){ $seq_text=trim($_POST['seqText']); if(!empty($seq_text)){ $handle=fopen($uploadfile,'w'); fwrite($handle,$seq_text); fclose($handle); $upload_state=0; } }else{ $url="gene_blast.php"; echo "<script language=\"javascript\">"; echo "location.href=\"$url\";"; echo "alert(\"系统错误,请返回重新操作! \");"; echo "</script>"; exit; } if ($upload_state==0){ #得到其他参数 $seq_start=trim($_POST['from']); $seq_end=trim($_POST['to']); $db_sta=trim($_POST['database']); if($db_sta==1){ $db="..\\db\\insect_rrna.fasta"; }elseif($db_sta==0){ $db="..\\db\\insect_mt.fasta"; } $program=trim($_POST['blast_type']); $e_vale=trim($_POST['EXPECT']); $description=trim($_POST['DESCRIPTIONS']); $alignments=trim($_POST['ALIGNMENTS']); $in_file="..\\temp\\" . $file_name . ".fa"; $out_file="..\\temp\\" . $file_name . ".out"; $blast="..\\cgi_bin\\bin\\blastall -p $program" . " -e $e_vale " . "-v $description " . "-b $alignments " . "-d $db " . "-i $in_file " . "-o $out_file"; #执行系统命令 system("$blast",$sys_state); #echo $sys_state; if ($sys_state==0) { #echo $blast; $url="../temp/" . $file_name . ".out"; echo "<script language=\"javascript\">"; echo "location.href=\"$url\";"; #echo "alert(\"程序出现错误,请重新开始! \");"; echo "</script>"; }else{ $url="gene_blast.php"; echo "<script language=\"javascript\">"; echo "location.href=\"$url\";"; echo "alert(\"程序出现错误,请重新开始! \");"; echo "</script>"; } if(file_exists($out_file)){ #unlink($out_file); } } else { $url="gene_blast.php"; echo "<script language=\"javascript\">"; echo "location.href=\"$url\";"; echo "alert(\"输入序列有问题,请重新输入! \");"; echo "</script>"; } ?> 问题讨论1、时间溢出的问题执行Blast可能需要执行很长的时间,所以调整PHP最大相应时间的参数。 2、如何传入用户比对的序列用户可以输入,或者上传序列,这里也需要根据需要调整最大上传文件的大小,无论上从文件上传还是从输入框输入,最后都将序列内容写入统一的临时文件中,将这个临时文件传给Blast。 3、是否需要检查参数的有效性比如核酸序列是否正确,输入的数值是否合法等等,这里的建议就是统统交给blast程序,如果出错,将错误截取,返回给用户就可以了。 4、安全性因为命令要传给后台执行,所以对于用户输入的内容要做过滤,有关这方面得信息请参考PHP调用系统命令函数的使用说明。 5、输出结果的样式可以通过设置Blast的参数来控制,比如输出为html格式的,详细参看作者的另一篇文章: Blast本地化:使用Blastall进行数据库比对 如果你想对blast结果做分析,比如画图,构建物种分类树等,可以对结果详细描述的文章: Blast结果的详细解析 还没有完以上也就是简单的实现个基本的功能,如果考虑到使用性能 ,并发,可用性等,上面的实现方法是远远不够的,比如,
所以就要考虑考虑异步执行,队列 ,由于有会涉及都另外的很多东西,这里就不多说了。大家可以留言探讨。 (责任编辑:大汉昆仑王) |