0

この Web クローラーでは、セッション変数 'page' がどこから来ているのかわかりません。誰もがアイデアを得ました。特定の Web ページからすべての URL を収集し、その機能を解読しようとしています。私はうまくやっていますが、私は疑問に思います a) $_SESSION['page'] はどこから来たのですか? b) if ステートメントで $_SESSION [i] がインクリメントされる理由。

 <?php

  session_start();

 $domain = "www.ebay.com";

  if(empty($_SESSION['page']))
  {
 $original_file = file_get_contents("http://" . $domain . "/");

 $_SESSION['i'] = 0;

  $connect = mysql_connect("xxx", "xxx", "xxxx");

  if (!$connect)
  {
  die("MySQL could not connect!");
 }

 $DB = mysql_select_db('xxx');

  if(!$DB)
 {
  die("MySQL could not select Database!");
   }
 }
   if(isset($_SESSION['page']))
    {

   $connect = mysql_connect("xxxx", "xxx", "xxx");

   if (!$connect)
 {
    die("MySQL could not connect!");
 }

  $DB = mysql_select_db('xxx');

    if(!$DB)
    {
 die("MySQL could not select Database!");
 }
   $PAGE = $_SESSION['page'];
    $original_file = file_get_contents("$PAGE");
      }

    $stripped_file = strip_tags($original_file, "<a>");
     preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $stripped_file, $matches);

    foreach($matches[1] as $key => $value)
    {

    if(strpos($value,"http://") != 'FALSE' && strpos($value,"https://") != 'FALSE')
    {
     $New_URL = "http://" . $domain . $value;
       }
     else
       {
      $New_URL = $value;
          }
      $New_URL = addslashes($New_URL);
      $Check = mysql_query("SELECT * FROM pages WHERE url='$New_URL'");
       $Num = mysql_num_rows($Check);

       if($Num == 0)
       {
      mysql_query("INSERT INTO pages (url)
      VALUES ('$New_URL')");

       $_SESSION['i']++;

      echo $_SESSION['i'] . "";
       }
         echo mysql_error();
        }

 $RandQuery = mysql_query("SELECT DISTINCT * FROM pages ORDER BY RAND() LIMIT 0,1");
 $RandReturn = mysql_num_rows($RandQuery);
  while($row1 = mysql_fetch_assoc($RandQuery))
     {
    $_SESSION['page'] = $row1['url'];
    }


    echo $RandReturn;
    echo $_SESSION['page'];
    mysql_close();

         ?>
4

2 に答える 2

1

読むのはひどいコードですが、私の知る限り、 $_SESSION['page'] は最後のセクションのデータベースループから設定されています。セッションが設定されると、次に PHP スクリプトが呼び出されたときに、IF は true を返します...

クローラー コードは、特定の www サイトからすべての A タグを取得し、DB に保存します。

于 2012-09-07T18:59:56.310 に答える
0

$_SESSION['page'] 変数は、YOU によって設定されます。これを設定する必要があります。セッションは、ユーザー セッション情報を保存するためにブラウザーに Cookie を作成します。あなたのコードでは、 $_SESSION['page'] が存在するかどうかを確認しますが、実際に値を与えることはありません。

if (isset($_SESSION['page'])) {
    // ...
}

設定しないため、実行されることはありません。$_SESSION は、$_SESSION['username']、$_SESSION['user-id'] などのログインなどに使用されます。

編集:設定したようですが、whileループで設定すると、反復ごとに上書きされるだけです。配列にしてみてください:

$i = 0;
while (condition) {
    $_SESSION['page'][i] = value;
    $i++;
}
于 2012-09-07T18:59:45.860 に答える