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结果的详细解析 还没有完以上也就是简单的实现个基本的功能,如果考虑到使用性能 ,并发,可用性等,上面的实现方法是远远不够的,比如,
所以就要考虑考虑异步执行,队列 ,由于有会涉及都另外的很多东西,这里就不多说了。大家可以留言探讨。 (责任编辑:大汉昆仑王) |









