Code in Loop Fatal error: Cannot redeclare sockaccess() (previously declared

Status
Niet open voor verdere reacties.

mrprozac

Gebruiker
Lid geworden
16 jul 2008
Berichten
183
Goedendag,

Ik probeer een script te implementeren in mijn website dat externe link goctrleerd door de headers te controleren en alleen te weergeven als die '200404' als reactie krijgt.

De reden dat ik 200404 heb gekozen is om de volgende reden
200 is de HEADER Response van de bestand
404 is de HEADER Response van een niet bestaand bestand, dit omdat veel oude domeinen zijn overgenomen en worden vervangen door irritante link-pagina's.

Nu heb ik index.php die de zoekopdracht uitvoert en resultaten weergeeft.
PHP:
<?php include("header.php.inc");?>
<?php
if($_GET["search"] == ""){ 
	}else{
include('conn.php'); 
$dbname = "seeqpod";
$usertable = "searches";
$song = $_GET['search']; 
if($_GET["page"] == "0"){

$query = "INSERT INTO searches ( term, count ) 
VALUES ('$song','1')";

$result = mysql_query($query) or DIE("Could not Execute Query on table $usertable");

mysql_close;
	};
	};
?>
<?php
$link = mysql_connect("localhost", "user", "pass");
mysql_select_db("db", $link);

$result = mysql_query("Select * from searches where term='$song'", $link);
$num_rows = mysql_num_rows($result);

echo "<center>$song has been searched $num_rows times now</center>";
?>
<?php
  foreach( $track as $value ) 
  { 
    $tasks = $value->getElementsByTagName("title"); 
    $task  = $tasks->item(0)->nodeValue; 
    $artists = $value->getElementsByTagName("creator"); 
    $artist  = $artists->item(0)->nodeValue; 
    $details = $value->getElementsByTagName("location"); 
    $detail  = $details->item(0)->nodeValue; 
	$ids  = $value->getElementsByTagName("mp3_url_id");
	$id   = $ids->item(0)->nodeValue;

    echo "<small><a href='player.swf?autostart=true&file=$detail&title=$task' class='lightwindow page-options' params='lightwindow_height=15,lightwindow_width=400,lightwindow_show_images=2'>"; echo $lang['play']; echo"</a> ::<a href='$detail"; echo "'>"; echo $lang['download']; echo "</a> ::</small> $task :: <small><a href='?search=$task&x=<?php echo $aantal; ?>' >"; echo $lang['srelevant']; echo "</a></small><br>"; 
  } 


?>
	<?php if($_GET["page"]=="0"){ ?>
	<a href="?search=<?php 
		echo $zoeken;
	?>&lang=<?php
		echo $_GET['lang']
	?>&page=<?php echo $next;?>"><img src="images/next.png" alt="<?php echo $lang['next']; ?>"  height="20"/></a>
	<? }else{ 
	if($_GET["page"]==""){
	}else{?>
	<a href="?search=<?php 
		echo $zoeken; 
	?>&lang=<?php 
		echo $_GET['lang']
	?>&page=<?php 
		echo $prev;
	?>"><img src="images/prev.png" alt="<?php 
		echo $lang['prev']; 
	?>" height="20"/></a> :: <a href="?search=<?php 
		echo $zoeken; 
	?>&lang=<?php 
		echo $_GET['lang']
	?>&page=<?php 
		echo $next;
	?>"><img src="images/next.png" alt="<?php 
		echo $lang['next']; 
	?>"  height="20"/></a>
	<? } }?>

<?php include("footer.php.inc");?>

En ik heb test.php die de script heeft met de HEADER check.
PHP:
<?php

$url = $detail;

$host = parse_url($url, PHP_URL_HOST);
$page = parse_url($url, PHP_URL_PATH);

$path_parts = pathinfo(parse_url($url, PHP_URL_PATH));

/*echo $path_parts['dirname'], "\n"; echo "<br />";
echo $path_parts['basename'], "\n"; echo "<br />";
echo $path_parts['filename'], "\n"; echo "<br />"; // since PHP 5.2.0
echo $path_parts['extension'], "\n"; echo "<br />";
*/
$server="$host";
function sockAccess($page)
{
   $errno="";
   $errstr="";
   $fp=0;
   global $server;
   $fp=fsockopen($server,80,$errno,$errstr,30);

   if($fp===0)
   {
      die("Error $errstr ($errno)");
   }
   //$page = "$path";
   $out="GET $page HTTP/1.1\r\n";
   $out.="Host: $server\r\n";
   $out.="Connection: Close\r\n\r\n";

   fwrite($fp,$out);
   $content=fgets($fp);
   $code=trim(substr($content,9,4));
   fclose($fp);
   return intval($code);
}

echo /*"CODE=", " ", */sockAccess("$page"), "";

echo /*"CODE=", " ", */sockAccess("/FASLE.phhp"), "";
/*
echo "CODE=", " ", sockAccess("brokenlink.php"), "<br />", "Fetching headers for : ", $server, $page, "<br />", $_GET['x'];
*/

?>

nu wil ik de script in test.php in een loop plaatsen in index.php.
De bedoeling is dat de script de headers moet controleren en alleen de resultaat moet laten zien als de test.php '200404' als antwoord geeft, anders moet die overgaan naar de volgende resultaat.

Maar als ik de volgende code crieer krijg ik deze error.
Code:
Fatal error: Cannot redeclare sockaccess() (previously declared in /home/mr.prozac/domains/balancehost.co.cc/public_html/dev/music/index.php:53) in /home/mr.prozac/domains/balancehost.co.cc/public_html/dev/music/index.php on line 53

PHP:
<?php include("header.php.inc");?>
<?php
if($_GET["search"] == ""){ 
	}else{
include('conn.php'); 
$dbname = "seeqpod";
$usertable = "searches";
$song = $_GET['search']; 
if($_GET["page"] == "0"){

$query = "INSERT INTO searches ( term, count ) 
VALUES ('$song','1')";

$result = mysql_query($query) or DIE("Could not Execute Query on table $usertable");

mysql_close;
	};
	};
?>
<?php
$link = mysql_connect("localhost", "user", "pass");
mysql_select_db("db", $link);

$result = mysql_query("Select * from searches where term='$song'", $link);
$num_rows = mysql_num_rows($result);

echo "<center>$song has been searched $num_rows times now</center>";
?>
<?php
  foreach( $track as $value ) 
  { 
    $tasks = $value->getElementsByTagName("title"); 
    $task  = $tasks->item(0)->nodeValue; 
    $artists = $value->getElementsByTagName("creator"); 
    $artist  = $artists->item(0)->nodeValue; 
    $details = $value->getElementsByTagName("location"); 
    $detail  = $details->item(0)->nodeValue; 
	$ids  = $value->getElementsByTagName("mp3_url_id");
	$id   = $ids->item(0)->nodeValue;
$url = $detail;

$host = parse_url($url, PHP_URL_HOST);
$page = parse_url($url, PHP_URL_PATH);

$path_parts = pathinfo(parse_url($url, PHP_URL_PATH));

/*echo $path_parts['dirname'], "\n"; echo "<br />";
echo $path_parts['basename'], "\n"; echo "<br />";
echo $path_parts['filename'], "\n"; echo "<br />"; // since PHP 5.2.0
echo $path_parts['extension'], "\n"; echo "<br />";
*/
$server="$host";
function sockAccess($page)
{
   $errno="";
   $errstr="";
   $fp=0;
   global $server;
   $fp=fsockopen($server,80,$errno,$errstr,30);

   if($fp===0)
   {
      die("Error $errstr ($errno)");
   }
   //$page = "$path";
   $out="GET $page HTTP/1.1\r\n";
   $out.="Host: $server\r\n";
   $out.="Connection: Close\r\n\r\n";

   fwrite($fp,$out);
   $content=fgets($fp);
   $code=trim(substr($content,9,4));
   fclose($fp);
   return intval($code);
}

echo /*"CODE=", " ", */sockAccess("$page"), "";

echo /*"CODE=", " ", */sockAccess("/FASLE.phhp"), "";
/*
echo "CODE=", " ", sockAccess("brokenlink.php"), "<br />", "Fetching headers for : ", $server, $page, "<br />", $_GET['x'];
*/

    echo "<small><a href='player.swf?autostart=true&file=$detail&title=$task' class='lightwindow page-options' params='lightwindow_height=15,lightwindow_width=400,lightwindow_show_images=2'>"; echo $lang['play']; echo"</a> ::<a href='$detail"; echo "'>"; echo $lang['download']; echo "</a> ::</small> $task :: <small><a href='?search=$task&x=<?php echo $aantal; ?>' >"; echo $lang['srelevant']; echo "</a></small><br>"; 
  } 


?>
	<?php if($_GET["page"]=="0"){ ?>
	<a href="?search=<?php 
		echo $zoeken;
	?>&lang=<?php
		echo $_GET['lang']
	?>&page=<?php echo $next;?>"><img src="images/next.png" alt="<?php echo $lang['next']; ?>"  height="20"/></a>
	<? }else{ 
	if($_GET["page"]==""){
	}else{?>
	<a href="?search=<?php 
		echo $zoeken; 
	?>&lang=<?php 
		echo $_GET['lang']
	?>&page=<?php 
		echo $prev;
	?>"><img src="images/prev.png" alt="<?php 
		echo $lang['prev']; 
	?>" height="20"/></a> :: <a href="?search=<?php 
		echo $zoeken; 
	?>&lang=<?php 
		echo $_GET['lang']
	?>&page=<?php 
		echo $next;
	?>"><img src="images/next.png" alt="<?php 
		echo $lang['next']; 
	?>"  height="20"/></a>
	<? } }?>

<?php include("footer.php.inc");?>

Weet iemand hoe ik in godsnaam deze code goed werkend moet krijgen?
 
Als ik een gok mag doen, de error betekend simpelweg dat je 2 functies hebt met dezelfde naam.

Dat kan op 2 manieren:

* Je hebt ergens in je project nog een functie die sockAccess() heet

of

* Je include je file 2 keer, en dan wordt de functie zelf ook 2x gedeclareerd en dat mag niet

Probeer eens om de functie te verplaatsen naar een nieuwe file en die file te includen met include_once ipv een gewone include?
 
Dat kan op veel meer manieren, zo ook in dit geval. Je hebt een functiedeclaratie bínnen je loop, en dat slaat nergens op. Zet functies altijd apart, in een bestand als functions.php, die je include op elke pagina. Een functie in het midden van de pagina is niet handig.
 
Dat kan op veel meer manieren, zo ook in dit geval. Je hebt een functiedeclaratie bínnen je loop, en dat slaat nergens op. Zet functies altijd apart, in een bestand als functions.php, die je include op elke pagina. Een functie in het midden van de pagina is niet handig.

De functie die ik aanroep hoort iedere externe link te controleren op HTTP HEADERS, als deze juiste antwoorden geven dan hoort die ze te printen anders niet. Maar hoe kan ik ervoor zorgen dat deze functie draait bij iedere link, als ik uit de loop haal draait php het script alleen bij de eerste, daarna stopt die ermee.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan