2012-03-09 12 views
1

ファイルのダウンロードページを解析しようとしていて、URLで渡された引数に応じて、適切なダウンロードファイルに自動的にリダイレクトします。私はそれをエコーするとすべてうまく動作しますが、私はheader()を使用しようとすると何もしません。PHPヘッダー()がリダイレクトで機能しません

<?php 

require_once('simple_html_dom.php'); 

$html = file_get_html('http://dl.bukkit.org/downloads/craftbukkit/'); 

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
//echo $dom->loadHTML($html) ? "success<br/>" : "failed<br/>"; 
libxml_clear_errors(); 
$dom->preserveWhiteSpace = true; 

$version = $_GET['version']; 

if($version == "beta") 
{ 
    foreach ($dom->getElementsByTagName('div') as $element) 
    { 
     if($element->getAttribute('class') == "downloadButton chan-rb mini") 
     { 
      foreach ($element->getElementsByTagName('a') as $link) 
      { 
       if($link->getAttribute('class') == "tooltipd") 
       { 
        $lnk = $link->getAttribute('href')."<br/>"; 
        $url = "Location:http://dl.bukkit.org".$lnk; 
        header($url); 
       } 
      } 
     } 
    } 
} 

?> 

私はこの前にHTMLを使用していませんが、すでに送信されているヘッダーの問題に取り組んでいると思います。実際のファイルにリダイレクトするための良い選択肢があります(この場合は.jar拡張子です)。

+0

htmlはあまり意味がありません。それはPHPの警告などを含むことができる任意の種類の** ANY **出力です。あなたが行ったかPHPが行ったかにかかわらず、1バイトの出力が送信された時点で、「ヘッダは既に送られました」という警告が出されます。 –

+0

あなたの 'Location'ヘッダに'
'があるのはなぜですか? – alex

+0

これは、以前の、良いキャッチから残っていた。そして、Marc B.の説明に感謝します。私は代わりに何が使えますか? –

答えて

0

ヘッダー情報を早期に送信していると言われていたすべての行を削除することで、その機能を有効にできました。ここにコードがありますが、誰かがこれをスピードアップするという提案があれば(それはかなり遅いです)、私に教えてください!

<?php 

require_once('simple_html_dom.php'); 

$html = file_get_html('http://dl.bukkit.org/downloads/craftbukkit/'); 

$dom = new DOMDocument; 
libxml_use_internal_errors(true); 
$dom->loadHTML($html); 
libxml_clear_errors(); 
$dom->preserveWhiteSpace = true; 

$version = $_GET['version']; 

if($version == "beta") 
{ 
    foreach ($dom->getElementsByTagName('div') as $element) 
    { 
     if($element->getAttribute('class') == "downloadButton chan-beta mini") 
     { 
      foreach ($element->getElementsByTagName('a') as $link) 
      { 
       if($link->getAttribute('class') == "tooltipd") 
       { 
        $url = "Location:http://dl.bukkit.org".$link->getAttribute('href'); 
        header($url); 
       } 
      } 
     } 
    } 
} 
+0

こんにちは、あなたの 'foreach'ループの終わりに達するまで、' header($ url) 'を送ってユーザーのブラウザをスクリプトにリダイレクトするデプシットは、論理的な結論に達するまで実行されていると考えてください。 header()を送信した後、 'break;'を追加してください。これはスクリプトの速度を向上させることはできませんが、ユーザーがリダイレクトされるとサーバーの負荷が軽減されます。 –

関連する問題