在这个网页抓取工具中,我不明白会话变量'page'来自哪里?任何人都有任何想法。它从给定的网页收集所有网址,我试图破译它的作用。我做得很好,但我想知道a)$ _SESSION ['page']来自哪里? b)为什么$ _SESSION [i]在if语句中递增。
<?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();
?>
答案 0 :(得分:1)
它可怕的代码阅读,但据我所知,$ _SESSION ['page']是从最后一节的数据库循环设置的。在设置会话时,下次调用PHP脚本时,IF将返回true ...
抓取工具代码从给定的www-site获取所有A标签,并将其保存到数据库中。
答案 1 :(得分:0)
$ _SESSION ['page']变量由您设置。您必须设置此项,会话在浏览器中创建一个用于存储用户会话信息的cookie。在你的代码中,你检查$ _SESSION ['page']是否存在,但你实际上从未给它一个值,所以
中的代码if (isset($_SESSION['page'])) {
// ...
}
永远不会被执行,因为你从未设置它。 $ _SESSION用于登录等内容,例如$ _SESSION ['username'],$ _SESSION ['user-id']
编辑:我看到你设置了它,但是当你在while循环中设置它时,你只需要在每次迭代时覆盖它,尝试使它成为一个数组:
$i = 0;
while (condition) {
$_SESSION['page'][i] = value;
$i++;
}