2016-04-18 24 views
0

私の目的は、いくつかのウェブサイトのURLを繰り返し、各ページの特定のデータを保存することです。しかし、私はどのように起動するのか分かりません。URLを繰り返して特定の値を取得する

リンクは常に同じです。最後のパラメータ(ID)のみが変更されます。 それは次のようになります。ページには、このような構造を有している

https://www.test.com/controller-name/06876472 

<p>test</p> 
<h2>TEST</h2> 

私は次の100個の<h2></h2>要素を取得したいのですが。 したがって、ループは06876571要素で停止する必要があります。

私はすでにこのような何かしようとしました:これは、安全な接続(https)である

<?php 

     for($i=06876472; $i<06876572; $i++) { 
      $results[]=file_get_contents("https://test.com/controller-name/".$i.""); 

     } 


     print_r($results); 

?> 

を。

エラーは次のとおりです。

のfile_get_contents(URL):ストリームをオープンに失敗しました:HTTPリクエストが失敗しました! HTTP/1.1 404が見つかりませんでした

誰かが私を助けることができたら本当に感謝します。

+0

間違ったURLを与えていることを意味します。 – Barmar

+4

'for'ループは意味を持ちません。 '06876472'で始めると、決して' 100'より小さくなりません。 – Barmar

+0

申し訳ありませんが、私は間違いをしました。 ループは ($ i = 06876472; $ i <06876572; $ i ++){ ... } – Peter

答えて

2

問題は、$iに先行ゼロがあることです。数字リテラルが0で始まると、PHPはそれを8進数として扱い、数字パーサーは8進数以外の数字(8進数ではない89)を見つけたら直ちに読み込みを停止します。従って$i = 06876472$i = 6と扱われます。

数値が常に8桁で、先頭のゼロがある場合は、sprintf()を使用して数値をフォーマットできます。

for ($i = 6876472; $i < 6876472 + 100; $i++) { 
    $url = sprintf("https://test.com/controller-name/%08d", $i); 
    $results[] = file_get_contents($url); 
} 
+0

のようになります。それは私が探していたものです! – Peter

0

右のトラックにあなたを置く、PHPでこれらの機能をチェックアウト:

http_build_query() 
explod() 
foreach() 
and finally the global $_GET array 
関連する問題