2012-02-20 144 views
-1

这是Perl代码...将perl代码转换为php? (2)

use strict; 
use warnings; 
use LWP::UserAgent; 
use HTTP::Date; 

my $taxon = $ARGV[0]; # Taxonomy identifier of organism. 

my $query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
my $file = $taxon . '.fasta'; 

my $agent = LWP::UserAgent->new; 
my $response = $agent->mirror($query, $file); 

if ($response->is_success) { 
    my $results = $response->header('X-Total-Results'); 
    my $release = $response->header('X-UniProt-Release'); 
    my $date = sprintf("%4d-%02d-%02d", HTTP::Date::parse_date($response->header('Last-Modified'))); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} 
elsif ($response->code == HTTP::Status::RC_NOT_MODIFIED) { 
    print "Data for taxon $taxon is up-to-date.\n"; 
} 
else { 
    die 'Failed, got ' . $response->status_line . 
     ' for ' . $response->request->uri . "\n"; 
} 

我曾尝试转换为PHP ... 仍有都是错误的代码行:在else if语句.. 如果您发现其他错误,请在这里发表评论吧...

这里是我到目前为止已经试过

$taxon = $ARGV[0]; # Taxonomy identifier of organism. 

$query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
$file = $taxon . '.fasta'; 

$response = $agent->mirror($query, $file); 

if ($response->is_success) { 
    $results = $response->header('X-Total-Results'); 
    $release = $response->header('X-UniProt-Release'); 
    $date = sprintf("%4d-%02d-%02d", date_parse($response->header('Last-Modified'))); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} 
elsif ($response->code == HTTP::Status::RC_NOT_MODIFIED) { 
    print "Data for taxon $taxon is up-to-date.\n"; 
} 
else { 
    die ('Failed, got ' . $response->status_line . 
    ' for ' . $response->request->uri . "\n"); 
} 
+3

嗯,你需要找到可比的PHP库来替换Perl代码使用的库。这行'HTTP :: Status :: RC_NOT_MODIFIED'对PHP没有意义。 – quickshiftin 2012-02-20 17:27:35

+0

@quickshiftin这是'304未修改'。有了库,你可以解析它。看到我的答案。 – 2012-02-20 17:47:43

+0

谢谢你..我仍然在寻找替换 – ansherina 2012-02-20 17:51:00

回答

1

使用这个WebGet类。

require("WebGet.php"); 
$taxon = $argv[0]; 
$agent = new WebGet(); 
$agent->useCache = true; 
$agent->cacheLocation = '/tmp'; 
touch('cookie.txt'); 
$agent->cookieFile = 'cookie.txt'; 


$query = "http://www.uniprot.org/uniprot/?query=organism:$taxon&format=fasta&include=yes"; 
$file = $taxon . '.fasta'; 

$agent->requestContent($query); 

if($agent->responseStatusCode==200){ 
    $results = $agent->responseHeaders[strtoupper('X-Total-Results')]; 
    $release = $agent->responseHeaders[strtoupper('X-UniProt-Release')]; 
    $date = date("Y-m-d", strtotime($agent->responseHeaders[strtoupper('Last-Modified')])); 
    print "Downloaded $results entries of UniProt release $release ($date) to file $file\n"; 
} // 304 Not Modified 
elseif($agent->responseStatusCode==304){ 
    print "Data for taxon $taxon is up-to-date.\n"; 
}else{ 
    die ('Failed, got ' . $agent->responseStatusLine . 
    " for uniprot/?query=organism:$taxon&format=fasta&include=yes\n"); 
} 
+0

哇。非常感谢你@Shiplu ...这真的有很大的帮助:) – ansherina 2012-02-20 17:57:20

+0

是的,并感谢你 – ansherina 2012-02-20 18:11:29

+0

我仍然有错误,你可以帮我这个 – ansherina 2012-02-20 18:51:57

3

我不相信的,你可以在PHP中使用elsif,尝试else if inste广告。

1

elsif失败的原因是因为它需要elseif。

+0

是啊对不起,我..改变了它,但它仍然有一个错误.. – ansherina 2012-02-20 17:33:29

+0

什么是错误? – BenOfTheNorth 2012-02-20 17:34:11

+0

我觉得这行HTTP :: Status :: RC_NOT_MODIFIED有问题,或者它不是正确的方式来在PHP代码我猜 – ansherina 2012-02-20 17:34:31

1

你在哪里运行这个脚本? $ARGV是perl在命令行中使用的。如果您从表单获取信息,请使用“发布”或“获取”方法(可通过$_POST$_GET访问)。

elseif替换elsif

你称之为$agent->mirror,但这里没有定义它们。

正如quickshiftin指出的,你不能引用Perl库 - 你必须找到PHP的等价物。

+0

谢谢大家 – ansherina 2012-02-20 17:46:56

+0

@ansherina不客气!如果您找到有用的答案,请记住用支票或upvote标记答案。 – amindfv 2012-02-20 18:05:16

+0

ahwst ..很抱歉,我是新来的..哈哈。 – ansherina 2012-02-20 18:17:52