1

file_get_contents() を使用して URL に変数を渡し、渡された変数の値に基づいて file_get_contents() に動的コンテンツを取得させる方法はありますか?

たとえば、Web サイト Aのページに次のコードがあるとします。

$contents=file_get_contents('http://example.com/get.php?a='.$number);
echo $contents;

$numberWeb サイト A で生成されます (値は 1、2、3 など)。

次に、example.comget.phpホストされます。get.php渡された変数の値に基づいて、異なるコンテンツを取得することは可能ですか? たとえばa=1、の特定の部分get.phpがフェッチされた場合a=2、別の部分get.phpがフェッチされた場合などです。これは可能ですか?

4

4 に答える 4

1

そうです。

変数のパターンを把握すれば可能です。

パターンが数字であることに気付いた場合は、次のようにしてみてください。

コードまたは出力に関係のないものを表示したくないし、遅延が追加されるだけなので、その場でフィルタリングを行いたくありません。get.phpターゲット マシンで:

if(!empty($_GET['a']) and is_numeric($_GET['a'])){

$id = $_GET['a'];
$sql = "select contents from database where id='$id'";
$results = mysqli_query($sql);
$row_cnt = mysqli_num_rows($result);
if ($row_cnt == 1){

   while ($row = mysqli_fetch_array($results)){
    echo $row['contents'];
   }
} elseif (empty($row_cnt) {
  echo "No results";
} else {
  echo "Too many records.";
}

} else {
 die;
}

マイニングを行うマシン (マシン 2) では:

$contents = '';

for($x=0;$x<150;$x++){
  $contents.=file_get_contents('http://example.com/get.php?a='.$number);
}

echo $contents;

ウェブ上で URL を開くときは、次のことを忘れないでください。

  1. 必要に応じてallow_url_fopenアクセスを許可する
  2. 遅延を追加して、ターゲットサーバーのリソースを圧倒しないようにします
  3. 誰かのrobots.txtファイルに違反していないことを確認してください
  4. サーバーが禁止されないように、user_agent を含む適切なヘッダーを渡します
  5. スクリプトを Apache で Web ページとして実行している場合は、実行時間の制限を増やします。

これにはcURLの方が適していて、多くの高度な機能が含まれています。

更新 - しかし、それはおそらく良い考えではありません

上記の例は、ウェブサイトのコンテンツを再表示するように表示するためのものではなく、1 つまたは 2 つのページにすぎません。私は誤解し、あなたがサイトのデータマイニングをしていると思いました (1 回限り)。

LAN あるサーバーから別のサーバーにコンテンツを表示するローカル ネットワーク LAN は非常に高速で、コンテンツをマイニングしている場合でも、Web サイトは (最新の基準で) かなり高速に動作する必要があります。

関数が呼び出されるたびに (キャッシュが無効になっている場合) システムが DNS ルックアップを実行しないように、ターゲット サイトのドメインと IP をホスト ファイルに追加する必要があります。

同じボックス それらが同じマシン上にある場合、何らかの一時停止が行われないと、システムが過負荷になる可能性があります。

WAN 2 つのサーバー ファーム内の 2 つの別個のネットワーク上にある場合、ホップ数はスクリプトのパフォーマンスに大きく影響します。これは、稼働中の本番サーバーを長時間実行するという点では良い考えではありません。ほとんどの人は、ページが読み込まれるまで数秒も待ちません。

さらに、ターゲット コンピューター上のすべてのトラフィックが 1 つの場所から来ているように見えるため、マイニングされているサーバーの統計からマイニング サーバーの IP をフィルター処理する必要があります。

それらは 2 つの異なるボックス上にあるため、IP テーブル (ファイアウォール) などによってターゲット サーバー上のすべてのアクセスがロックされないようにする必要があります。同じ IP からサイトに繰り返し接続するのが速すぎる可能性があるからです。両方のネットワークを制御していない場合、ファイアウォールやルーターなど、あらゆる種類のものが繰り返しアクセスをブロックすることもあります. 多くの Web ホストは、大量のトラフィックが繰り返されることを好みません。また、どちらかのボックスを誤って設定すると、帯域幅にペナルティが課される場合があります。

データベースのレプリケーション データベースからコンテンツを取得する場合、データベースのレプリケーションを調べて、各マシンにデータベースの 2 つのコピーを保持することをお勧めします。次に、他のファイルと同じようにコンテンツをロードするだけです。

于 2013-05-15T20:39:05.437 に答える