• 我要登录|
  • 免费注册
    |
  • 我的丁香通
    • 企业机构:
    • 成为企业机构
    • 个人用户:
    • 个人中心
  • 移动端
    移动端
丁香通 logo丁香实验_LOGO
搜实验

    大家都在搜

      大家都在搜

        0 人通过求购买到了急需的产品
        免费发布求购
        发布求购
        点赞
        收藏
        wx-share
        分享

        windows下构建基于web的Blast服务

        互联网

        1130

        本篇文章主要介绍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个小时,用户那边就会一直处于响应状态,是出问题了?还是正常呢?八成会后退重新来过!
        • 如果几个用户同时执行比对呢?服务器很可能就瘫痪了!

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

        (责任编辑:大汉昆仑王)
        ad image
        提问
        扫一扫
        丁香实验小程序二维码
        实验小助手
        丁香实验公众号二维码
        扫码领资料
        反馈
        TOP
        打开小程序