Login
欢迎浏览恩派尔生物资料网
我要投稿 请登录 免费注册 安全退出

您现在的位置是: 首页 > 实验方法 > 生物化学

生物化学

windows下构建基于web的Blast服务

2025-05-06 生物化学 加入收藏
本篇文章主要介绍windows如何使用PHP建立PHP服务。首先讨论一下设计思路web界面,可以参考NCBI,使用Javascript增加对用户输入的校验,然后

本篇文章主要介绍windows如何使用PHP建立PHP服务。

首先讨论一下设计思路

  • web界面,可以参考NCBI,
  • 使用Javascript增加对用户输入的校验,
  • 然后将用户输入传给PHP脚本,PHP脚本检验用户输入,
  • 并将这些输入拼成执行Blast的命令,
  • 然后传给后台执行命令,
  • 拦截Blast程序的输出,判断是否执行成功,
  • 将结果返回给用户。

 

 代码示例(很早以前写的,供参考)  <?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结果的详细解析

还没有完

以上也就是简单的实现个基本的功能,如果考虑到使用性能 ,并发,可用性等,上面的实现方法是远远不够的,比如,

  • 一个比对要执行2个小时,用户那边就会一直处于响应状态,是出问题了?还是正常呢?八成会后退重新来过!
  • 如果几个用户同时执行比对呢?服务器很可能就瘫痪了!

 所以就要考虑考虑异步执行,队列 ,由于有会涉及都另外的很多东西,这里就不多说了。大家可以留言探讨。

(责任编辑:大汉昆仑王)


文章底部广告位

文章评论

加载中~