2012-02-20 2 views
-1

펄 코드를 PHP로 변환 하시겠습니까? 다른 if 문 .. 에서 (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는이 변환 시도 ... 펄 코드입니다 ... 오류에 코드의 라인이 아직 없습니다 다른 오류를 발견하는 경우 여기에

은 내가, 당신은 PHP에서 elsif을 사용할 수 있습니다 보라 else if inste을 시도하지 않는

$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

음, Perl 코드에서 사용하는 것을 대체 할 PHP 라이브러리를 찾아야합니다. 이 줄'HTTP :: Status :: RC_NOT_MODIFIED'는 PHP에는 아무런 의미가 없습니다. – quickshiftin

+0

@quickshiftin 이것은 '304 Not Modified'입니다. 라이브러리로 파싱 할 수 있습니다. 내 대답을 보라. –

+0

그 점에 대해 고마움. 아직도 대체하고 싶습니다. – ansherina

답변

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

+0

예, 고마워요. – ansherina

+0

오류가 계속 있습니다. – ansherina

3

지금까지 시도한 것입니다 ... 여기를 언급 해주십시오 광고.

1

elsif가 실패하는 이유는 elseif이어야하기 때문입니다.

+0

그걸 유감으로 생각합니다. 나는 그것을 변경했지만 여전히 오류가 있습니다 .. – ansherina

+0

무엇이 오류입니까? – BenOfTheNorth

+0

나는이 줄 HTTP :: Status :: RC_NOT_MODIFIED가 뭔가 잘못되었거나 PHP에서 코드를 작성하는 것이 옳지 않다고 생각한다. – ansherina

1

어디에서이 스크립트를 실행하고 있습니까? $ARGV은 perl이 명령 행에서 사용하는 것입니다. 양식에서 정보를 얻으려면 게시 또는 가져 오기 방법 ($_POST$_GET으로 액세스)을 사용하십시오.

elsifelseif으로 바꿉니다.

$agent->mirror과 같은 전화 번호를 사용하지만 여기에는 정의되어 있지 않습니다.

quickshiftin이 언급했듯이 Perl 라이브러리를 참조 할 수 없으므로 PHP와 동등한 제품을 찾아야합니다.

+0

감사합니다. – ansherina

+0

@ansherina 환영합니다! 도움이되는 답변을 찾으면 수표 나 업보트로 답을 표시해야합니다. – amindfv

+0

ahwst .. 미안, 나는 이것에 초보 다.. 하하. – ansherina