Befehle werden nicht verarbeitet

PHP-Fan

Erfahrenes Mitglied
Er gibt Mir die

PHP:
<br>
<br><b>Seeder:</b> <? echo $sha1tor['complete']; ?> (aktuell)
<br><b>Leecher:</b> <? echo $sha1tor['incomplete']; ?> (aktuell)
<br><b>Peers:</b>  <? echo $sha1tor['complete'] + $sha1tor['incomplete']; ?> (aktuell)<br>

nicht aus! Fehlerneldung lautet:

Code:
Fatal error: Call to undefined function: sapeerconnect() in /website/popup.php on line 215

Was soll ich tun?

Hier der ganze Code (Habe unwichtige sachen entfernt. Das ding ansicht funkioniert er gibt halt nur nichts aus, bzw, ermittelt keine Werte was an der Fehlermeldung liegt. Aber wie beheben?

PHP:
<?

error_reporting(E_ALL);
require("configx.php");
$dbverbindung = mysql_connect($server, $user, $password);

$dbanfrage = "SELECT * from cm_dl_info WHERE id='".$_GET['id']."'";

$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

echo mysql_error();

while ($ausgabe = mysql_fetch_array ($result)){


?>



<?

function pathurlencode($uri) {
        $uri = urlencode($uri);
        $uri = str_replace('%3A', ':', $uri);
        $uri = str_replace('%2F', '/', $uri);
        $uri = str_replace('%26', '&', $uri);
        $uri = str_replace('%40', '@', $uri);
        $uri = str_replace('%3A', ':', $uri);
        $uri = str_replace('%3F', '?', $uri);
        $uri = str_replace('%3D', '=', $uri);
        $uri = str_replace('%5B', '[', $uri);
        $uri = str_replace('%5D', ']', $uri);
        return $uri;
    }

require("BDecodex.php");
require("BEncodex.php");

$stream = file_get_contents($ausgabe2['link']);

$array = BDecode($stream);

$infovariable = $array["info"];
$infohash = sha1(BEncode($infovariable));

$announce = $array["announce"];
$announce = strtolower($announce);
if (substr($announce, 0, 7) === "http://"){
if ((substr_count($announce, "/announce")) == 1){
$scrape = str_replace('/announce', '/scrape', $announce);
$httpget = "?info_hash=";
$binsha1 = pack("H*", $infohash);
$binsha1s = addslashes($binsha1);

$decoded = BDecode($stream);

//

if (isset($array["announce"])){
$announce = $array["announce"];
// Possibly HtTp://
$announce = strtolower($announce);
if (substr($announce, 0, 7) === "http://"){
if ((substr_count($announce, "/announce")) == 1){
$scrape = str_replace('/announce', '/scrape', $announce);
$httpget = "?info_hash=";
$binsha1 = pack("H*", $infohash);
$binsha1s = addslashes($binsha1);
$fullurl = "$scrape$httpget$binsha1";
$httpurl = pathurlencode($fullurl);
$torrentsize = "";
sapeerconnect($httpurl, $binsha1s, $torrentsize);
}  else {
$error = "<BR>Bad Tracker URL for scraping (Maybe trackerless torrent)." ;
echo $error;
}
}
else {
$error = "<BR>Bad Tracker URL for scraping (Maybe trackerless torrent)." ;
echo $error;
}
}
}
        }
}



function sapeerconnect($httpurl, $binsha1s, $torrentsize) {
   // Code from yabtuc-0.4.1
$fp = fopen($httpurl, "rb");
$stream = "";
        if ($fp) {
            while( !feof( $fp ) ) {
                $stream .= @fread($fp, 128);
}
}
fclose($fp);


if($fp === FALSE){
$error = "<BR>No Response From Tracker. Please Try Again." ;
echo $error;
}
else{

$decoded = BDecode($stream);
if ($decoded["files"] === TRUE) {
$error = "<BR>File not present on tracker (torrent may be dead).";
echo $error;
}
else
{

$files = $decoded['files'];
$sha1tor = $files[$binsha1s];

?>

<br>
<br><b>Seeder:</b> <? echo $sha1tor['complete']; ?> (aktuell)
<br><b>Leecher:</b> <? echo $sha1tor['incomplete']; ?> (aktuell)
<br><b>Peers:</b>  <? echo $sha1tor['complete'] + $sha1tor['incomplete']; ?> (aktuell)<br>

<?

require'config2.php';

$seeder = $sha1tor['complete'];
$leecher = $sha1tor['incomplete'];

$dbverbindung = mysql_connect($server, $user, $password);

$dbanfrage = "UPDATE cm_dl_info SET seeder = '$seeder', leecher = '$leecher'  WHERE id = '".$_GET['id']."'";

mysql_query($dbanfrage);


}
}
}
}

?>
 
Du deklarierst die Funktion erst nachdem Du sie aufrufst. Da PHP aber einfach nur Top-Down abgearbeitet wird ist die Funktion eben zum Aufrufzeitpunkt noch nicht bekannt und deshalb bekommst Du einen Fehler.
 
Dennis Wronka hat gesagt.:
Du deklarierst die Funktion erst nachdem Du sie aufrufst. Da PHP aber einfach nur Top-Down abgearbeitet wird ist die Funktion eben zum Aufrufzeitpunkt noch nicht bekannt und deshalb bekommst Du einen Fehler.
Diese Bedingung ist seit PHP 4 abgeschafft. So ist es auch möglich eine Funktion nach dem Aufruf zu definieren – bedingte Funktionsdefinitionen sind davon ausgenommen.
Dennoch ist es sinnvoller die Funktionsdefinitionen am Anfang der Skriptdatei oder sogar in einer eigenen Datei ausgelagert zu notieren.

Auch solltest du dir unbedingt einen Programmierstil aneignen und an diesem fessthalten. So solltest du etwa die einzelnen Level des Quellcodes einrücken, um so die Logik der einzelnen Blöcke hervorzuheben und somit für mehr Übersichtlichkeit zu sorgen. Dann könnte dann etwa wie folgt aussehen:
PHP:
<?php

	error_reporting(E_ALL);
	require("configx.php");
	$dbverbindung = mysql_connect($server, $user, $password);

	$dbanfrage = "SELECT * from cm_dl_info WHERE id='".$_GET['id']."'";

	$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);

	echo mysql_error();

	while ($ausgabe = mysql_fetch_array ($result)) {

		function pathurlencode($uri) {
			$uri = urlencode($uri);
			$uri = str_replace('%3A', ':', $uri);
			$uri = str_replace('%2F', '/', $uri);
			$uri = str_replace('%26', '&', $uri);
			$uri = str_replace('%40', '@', $uri);
			$uri = str_replace('%3A', ':', $uri);
			$uri = str_replace('%3F', '?', $uri);
			$uri = str_replace('%3D', '=', $uri);
			$uri = str_replace('%5B', '[', $uri);
			$uri = str_replace('%5D', ']', $uri);
			return $uri;
		}

		require("BDecodex.php");
		require("BEncodex.php");

		$stream = file_get_contents($ausgabe2['link']);

		$array = BDecode($stream);

		$infovariable = $array["info"];
		$infohash = sha1(BEncode($infovariable));

		$announce = $array["announce"];
		$announce = strtolower($announce);
		if (substr($announce, 0, 7) === "http://") {
			if ((substr_count($announce, "/announce")) == 1) {
				$scrape = str_replace('/announce', '/scrape', $announce); 
				$httpget = "?info_hash=";
				$binsha1 = pack("H*", $infohash);
				$binsha1s = addslashes($binsha1);

				$decoded = BDecode($stream);

				//

				if (isset($array["announce"])) {
					$announce = $array["announce"];
					// Possibly HtTp://
					$announce = strtolower($announce);
					if (substr($announce, 0, 7) === "http://") {
						if ((substr_count($announce, "/announce")) == 1) {
							$scrape = str_replace('/announce', '/scrape', $announce);
							$httpget = "?info_hash=";
							$binsha1 = pack("H*", $infohash);
							$binsha1s = addslashes($binsha1);
							$fullurl = "$scrape$httpget$binsha1";
							$httpurl = pathurlencode($fullurl);
							$torrentsize = "";
							sapeerconnect($httpurl, $binsha1s, $torrentsize);
						} else {
							$error = "<BR>Bad Tracker URL for scraping (Maybe trackerless torrent).";
							echo $error;
						}
					} else {
						$error = "<BR>Bad Tracker URL for scraping (Maybe trackerless torrent).";
						echo $error;
					}
				}
			}
		}
	}

	function sapeerconnect($httpurl, $binsha1s, $torrentsize) {
		// Code from yabtuc-0.4.1
		$fp = fopen($httpurl, "rb");
		$stream = "";
		if ($fp) {
			while( !feof( $fp ) ) {
				$stream .= @fread($fp, 128);
			}
		}
		fclose($fp);


		if($fp === FALSE) {
			$error = "<BR>No Response From Tracker. Please Try Again.";
			echo $error;
		} else {

			$decoded = BDecode($stream);
			if ($decoded["files"] === TRUE) {
				$error = "<BR>File not present on tracker (torrent may be dead).";
				echo $error;
			} else {
				$files = $decoded['files'];
				$sha1tor = $files[$binsha1s];

?>

<br>
<br><b>Seeder:</b> <? echo $sha1tor['complete']; ?> (aktuell)
<br><b>Leecher:</b> <? echo $sha1tor['incomplete']; ?> (aktuell)
<br><b>Peers:</b>  <? echo $sha1tor['complete'] + $sha1tor['incomplete']; ?> (aktuell)<br>

<?php

				require 'config2.php';

				$seeder = $sha1tor['complete'];
				$leecher = $sha1tor['incomplete'];

				$dbverbindung = mysql_connect($server, $user, $password);

				$dbanfrage = "UPDATE cm_dl_info SET seeder = '$seeder', leecher = '$leecher'  WHERE id = '".$_GET['id']."'";

				mysql_query($dbanfrage);

			}
		}
	}
} 

?>
 
Danke schonmal für die zahlrteichen Hilfen. Wo soll ich die Funktion am besten hinbauen? Irgendwie kommen bei mir immer fehler...
 
Hi,

ich empfehle dir eine functions.inc.php oder Ähnliches. So mache ich es mit meinen Funktionen. Die Datei fasst dann alle Funktionen, die ich oft benötige und die für all meine Module relevant sind. Dann brauchst du nurnoch eine "index.php" oder was du eben möchtest und includest die Funktionen einfach mit:

PHP:
include("functions.inc.php");

Somit kannst du dein eigentliches Programm übersichtilicher gestalten und es macht es einfacher zu warten.

In diesem Sinne,

Tseng
 
Zurück