PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-Anfänger steht vor einer Fehlermeldung



McFraggle
17-11-2005, 12:39
Hallo zusammen! Mein erster Post hier!
Vorweg: Ich hab von php etwa so viel Ahnung wie vom Zuckerrohranbau.
Problem:
Ich versuche eine php-Anwendung (openTimetool) bei mir aufzusetzen. Endlich hab ich nun den Apache soweit, dass er php ausführt und die mySQL-DB, die das openTimetool benötigt, sollte auch laufen.
Jedoch: Beim Start des Skriptes kommt eine Fehlermeldung:

Fatal error: Call to a member function on a non-object in /srv/www/htdocs/openTimetool/htdocs/index.php on line 40
Die ersten Code-Zeilen des Skriptes:

if (@$_REQUEST['resetAccountName']) {
$account->setAccountName();
}

if (@$_REQUEST['newData']['accountName']) {
require_once $config->classPath.'/modules/remote/remote.php';

$accountName = $_REQUEST['newData']['accountName'];
if (modules_remote::execute('account.isAccountName',$ accountName)) {
$account->setAccountName($accountName);
$account->prepare(true); // force getting the data via XML-RPC again
} else {
$applError->set('This is not a valid account name!');
}
}

if( ($account->isAspVersion() && $account->getAccountName()) || !$account->isAspVersion() ) {
require_once 'HTTP/Header.php';
HTTP_Header::redirect($config->vApplRoot.'/modules/time/today.php');
}

Zeile 40 ist dabei die Kopfzeile des letzten If-Statements.

hat jemand eine Idee, wie ich das beheben kann?

Turbohummel
17-11-2005, 14:41
Hm. Du rufst eine Funktion der Klasse Account (halt die die in $account drin liegt) auf. $account müsste eine Instanz der Klasse $account sein.

Um den Fehler zu Finden, würde ich einen var_dump vor die Zeile setzen, also
var_dump($accout);
Dort sollte irgendetwas mit "Object" rauskommen. Danach folgt die Liste den Attributen der Klasse. Wenn das so ist -> ich hab keine Ahnung was der Fehler ist.

Wenn nicht müsste der Fehler in dieser Zeile liegen:
$account->prepare(true);
Denn dort scheint $account ja noch eine Instanz der richtigen Klasse zu referenzieren.
Einfach mal den vardump davor und dahinter setzen. Wenn das Objekt vorher da war, später aber nicht mehr, dann hast du die Fehlerquelle gefunden: Er liegt in der Funktion prepare()

Wenn du register_global an hast: In der entsprechenden Funktion wird dann wahrscheinlich eine Variable names $account für was anderes verwendet. Dadurch wird die Referenzvariable $account in deinem Stück Code natürlich überschrieben und ist danach ein String oder ein Array oder sonst was. Lösung hierbei: register_globals auf Off stellen, ggf über die Funktion ini_set() (Nachzulesen in der PHP-API).

Noch n Tipp: Ein wenig Inline-Doku täte dem Code ganz gut.

undefined
17-11-2005, 21:03
das ist mal wieder ein Typischer Killer Code.
Entferne die @ Zeichen und es wird auch eine richtige Fehler Meldung ausgegeben ;)

McFraggle
18-11-2005, 08:48
Ähm, wie gesagt, dass ist nicht mein Code, sondern der vom "openTimetool"-Projekt. Ich spreche nicht php.
Die obige Fehlermeldung ist nun verschwunden. Ich musste noch eine .htaccess-Datei anpassen (auto_prepend_file-Anweisung, keine Ahnung, was das ist).
Nun hab ich ein anderes Problem: Das php-Skript wird offenbar ausgeführt, der Response, den mein Browser vom Apache erhält, ist aber vollkommen leer! Als ob das php-Skript eine völlig leere Seite produziert!

Habe eine auf jeden Fall lauffähige Version von openTimetool von einem anderen Server kopiert. Das gleiche. Könnte also vielleicht an der "php-Infrastruktur" liegen.

Fällt euch da spontan was zu ein? Irgendein php-Standardfehler? (Ein anderes Mini-Skript funzt übrigens bei mir...)

Turbohummel
18-11-2005, 15:45
Lege mal ne Datei an und schreibe phpinfo() rein. Linke diese bitte hier, und wenn es möglich ist, auch noch das gleiche auf dem ursprünglichen Server. Vielleicht liegts an der PHP-Version, vielleicht ist die Datenbankverbindung aber auch falsch eingetragen.