我写了一段代码,以解析作为输入的网站中的URL(我选择网站:www.tunisie-web.org),并确定是否有外部 我的脚本php:crawl.php的内容
<?php
set_time_limit(10000);
include_once('../PHPCrawl_083/PHPCrawl_083/libs/PHPCrawler.class.php');
class MyCrawler extends PHPCrawler
{
function handleDocumentInfo(PHPCrawlerDocumentInfo $DocInfo)
{
// Just detect linebreak for output ("\n" in CLI-mode, otherwise "<br>").
if (PHP_SAPI == "cli" ) $lb = "\n";
else {
$lb = "<br/>";
function parse_external_url( $url) {
echo "0"."<br/>";
// Abort if parameter URL is empty
if( empty($url) ) {
echo "l'url est vide"."<br/>";
}
echo "1"."<br/>";
// Parse home URL and parameter URL
$link_url = parse_url( $url );
$home_url = parse_url( $_SERVER['HTTP_HOST'] );
//$home_url = parse_url( home_url() ); // Works for WordPress
// Decide on target
if( $link_url['host'] == $home_url['host'] ) {
// Is an internal link
echo "<br/>";
echo "2"."<br/>";
}
else {
// Is an external link
// Print the URL and the HTTP-status-Code
echo "Page requested: ".$url." (".$url->http_status_code.")"."<br/>";
// Print the refering URL
echo "Referer-page: ".$url->referer_url."<br/>";
}
echo "3";
}
parse_external_url( $DocInfo->url);
echo "<br/>";
flush();
}
}
}
$crawler = new MyCrawler();
$crawler->setURL("www.tunisie-web.org ");
$crawler->addReceiveContentType("#text/html#");
$crawler->addURLFilterRule("#\.(jpg|gif|png|pdf|jpeg|css|js)$# i");
$crawler->setWorkingDirectory("C:/Users/mayss/Documents/travailcrawl/");
$crawler->go();
?>
但是它显示了下面的结果
0 1 请求的页面:http://www.tunisie-web.org() Referer的页面: 3
和这个错误 致命错误:无法在第23行的C:\ wamp \ www \ crawl \ crawl.php中重新声明parse_external_url()(之前在C:\ wamp \ www \ crawl \ crawl.php:23中声明)
答案 0 :(得分:0)
这只是意味着您正在重新声明该功能。
可能你已经包含C:\wamp\www\crawl\crawl.php
,其中声明了该函数 OR 扩展类PHPCrawler.class.php
具有相同的功能。
<强>解决方案:强>
重命名在MyCrawler
类中声明的函数,如:
function parse_external_url( $url) {
//======TO===========
function parse_external_url2( $url) {
// OR to other name
注意:我怀疑你想要在你的类中调用函数parse_external_url
而不是声明,Coz在另一个函数中声明一个函数不是一个好习惯。 如果是,正确调用它; 如果没有,然后在函数handleDocumentInfo
之外使用其他名称声明它,并在您班级的handleDocumentInfo
函数中正确调用该函数。