php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 26.06.2005, 20:55  
Gast
 
Beiträge: n/a
Standard irc bot probleme mit fread & eval

hallo leute,

ich habn sehr komisches problem mit meinem irc-bot

also ich fang ma von vorne an

habe ich mal das grundgerüst eines irc-bots von einer webseite runtergeladen und nach und nach erweitert.

ich fand es sehr nervig, dass die befehle, die die user im irc ausführen konnten hardcodes waren, man diese also im laufenden betrieb nicht ändern konnte.
deshalb kam ich auf die idee diese commands in eine mysql datenbank auszulagern und diese bei bedarf zu laden und mit eval auszuführen (wer mir jetzt mit sicherheit kommt, kriegt haue )
das funktionierte wunderbar, jedoch war es extrem unständlich diese commands zu administrieren (erstma webinterface schreiben, etc)
ich wollte diese commands wieder mit einem texteditor schreiben, also versuchte ich von der datenbank wegzukommen und legte ein verzeichniss im bot ordner an, in das die commands kamen
(die dateinamen sind/waren so aufgebaut: Accesslevel Alias1 Alias2.php Beispiel 000 time.php)
Gesagt, getan. script angepasst und ausprobiert. nur dann fings an komisch zu werden

Ein Beispiel:

So sieht das Command '500 nick.php' aus, mit dem man den nick des bots ändern kann:

Code:
<?
if(count($args) >= 2)
	cmd_send("NICK ".$args[1]);
else
	notice("Bitte gebe einen Namen an", $con['buffer']['username']);
?>
wenn man jetzt .nick bot2 eingibt, nennt er sich ohne probleme um,
aber wenn ich nach dem <? noch eine leere zeile einfüge

Code:
<?

if(count($args) >= 2)
	cmd_send("NICK ".$args[1]);
else
	notice("Bitte gebe einen Namen an", $con['buffer']['username']);
?>
bekomme ich diesen fehler:
Zitat:
Parse error: parse error, unexpected '?' in /home/freak/diddi/functions.php(94) : eval()'d code on line 7
dabei habe ich doch eigentlich nichts am code geändert
und falls ich jetzt in dieser zeile einen kommentar schreibe:

Code:
<?
#kommentar
if(count($args) >= 2)
	cmd_send("NICK ".$args[1]);
else
	notice("Bitte gebe einen Namen an", $con['buffer']['username']);
?>
bekomme ich diesen parse error:
Zitat:
Parse error: parse error, unexpected $ in /home/freak/diddi/functions.php(94) : eval()'d code on line 6

ich weiss echt nicht was ich machen soll, eigentlich ist ja nichts falsch an dem code bzw nichts wirklich verändert worden

der gleiche code hat ja auch in der datenbank funktioniert und jetzt bricht jedes 2te command ab


ach fast vergessen
dies ist die zeile mit der die commands ausgeführt werden:

Code:
function process_commands()
{
	global $con, $CONFIG, $CMD, $SQL, $users, $test;
	$args = explode(" ", $con['buffer']['text']);
	
	//Anmerkung: Befehle beginnen ausschliesslich mit einem besonderen zeichen (bei mir mit einem punkt), damit der bot nicht jedesmal den text nach befehlen scannen muss
	if(substr($args[0],0,strlen($CONFIG['prefix'])) == $CONFIG['prefix']) {

		$seinNick = $con['buffer']['username'];
		$seinAccess = $users[$con['buffer']['username']]['access'];

		$befehl = substr($args[0],strlen($CONFIG['prefix']));
		$BEFEHL = strtoupper($befehl);

		//In $CMD nachschauen, ob ein Alias fr diesen Befehl hinterlegt ist
		//Anmerkung: $CMD wird am Anfang mit den inhalten des commands ordner gefüllt (also jedes alias bekommt hier einen key der auf den vollen dateinamen zurückführt

		if($CMD[$BEFEHL]) {
			$filename = $CONFIG['cmdDir']."/".$CMD[$BEFEHL];
			$handle = fopen($filename, "r");
			$contents = fread($handle, filesize($filename));
			fclose($handle);

			#eval($contents);

			$contents = trim($contents);

			eval('?>' . $contents . '<? ');
		}
		else
			echo "Debug: Kein Eintrag gefunden\n";
	}
}

achja: die fehler treten unter windows (xampp) wie auch unter debian (php4) auf

euch noch einen schönen sonntag
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.06.2005, 02:49  
Gast
 
Beiträge: n/a
Standard

Ich verstehe nicht ganz, weshalb hier eval(); verwendet wird.
eval(); ist normalerweise dazu da um z.B. einem String das Ergebnis einer Funktion zuzuweisen. Deswegen verstehe ich nicht ganz, was die Funktion hier bringen soll.



Steffen
  Mit Zitat antworten
Alt 29.06.2005, 19:16  
Gast
 
Beiträge: n/a
Standard

einem string weisst man doch normalerweise das ergebnis einer funktion so zu:
$str = funktion();

eval führt den code im string aus

Hier das Beispiel von php.net

Zitat:
Zitat von [url
http://www.php.net/eval[/url]]
Code:
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
Ergebnis:

This is a $string with my $name in it.
This is a cup with my coffee in it.
Der Inhalt des Strings wird also im laufenden Betrieb geparst

Wer noch fragen zu meinem Source hat oder es Unklarheiten gibt, sollte das bitte äußern


Woran denkt ihr könnte mein Fehler liegen?
  Mit Zitat antworten
Alt 29.06.2005, 21:47  
Gast
 
Beiträge: n/a
Standard

Daß eval() einen String OHNE PHP Tags erwartet, weißt Du hoffentlich schon?
  Mit Zitat antworten
Alt 29.06.2005, 22:02  
Erfahrener Benutzer
 
Registriert seit: 20.01.2005
Beiträge: 1.557
PHP-Kenntnisse:
Fortgeschritten
Buhmann ist zur Zeit noch ein unbeschriebenes Blatt
Buhmann eine Nachricht über ICQ schicken Buhmann eine Nachricht über MSN schicken
Standard

und wofür gibt es eigentlich include? ...
Buhmann ist offline   Mit Zitat antworten
Alt 30.06.2005, 14:52  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von meikel
Daß eval() einen String OHNE PHP Tags erwartet, weißt Du hoffentlich schon?
jupp, das mach ich nur, damit mein editor das script farbig anzeigt
Code:
eval('?>' . $contents . '<? ');
ich kann die tags auch entfernen, das macht keinen unterschied (die fehler kommen leider auch)


@Buhmann ja ich weiss dasses auch mit include klappt,
nur das problem dabei ist, das der bot sich bei einem parse error sofort ausm irc verabschiedet, mit eval meldet er nur den fehler und führt den code nicht aus

ich habe das gefühl das der code im bot vllt nicht korrekt ist oder das das quoting in $contents irgendwie nicht stimmt
  Mit Zitat antworten
Alt 01.07.2005, 04:19  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Lascii
Zitat:
Zitat von meikel
Daß eval() einen String OHNE PHP Tags erwartet, weißt Du hoffentlich schon?
jupp, das mach ich nur, damit mein editor das script farbig anzeigt
Code:
eval('?>' . $contents . '<? ');
ich kann die tags auch entfernen, das macht keinen unterschied (die fehler kommen leider auch)
Nein, nein, wenn Du ein PHP File lädst, mußt Du eval so verwenden:
PHP-Code:
<?php
eval('?>' $file '<?php');
?>
ODER aus dem String die PHP Tags am Anfang und am Ende entfernen.

Dein Problem ist nur, daß Du das File so in eine Variable lesen mußt, daß die Stringkonventionen nicht verletzt werden (' und ") UND daß es nicht geparst wird. Parsen darf es nur eval().
  Mit Zitat antworten
Alt 01.07.2005, 17:18  
Gast
 
Beiträge: n/a
Standard

danke für deine antwort

hmm es macht keinen unterschied
ob ich
eval('?>' . $contents . '<? '); oder
eval('?>' . $contents . '<?php');
schreibe,
wie gesagt manchmal wird der code auch problemlos ausgeführt

Ich tippe auch, das das einlesen der variable probleme macht , nur wie kann ich es bewerkstelligen, das es klappt

andere frage:
das gleiche ist ja theoretisch auch mit include möglich, jedoch beendet sich das script, wenn der includete code fehlerhaft ist (was den sinn dieses problems in frage stellt, da ich den bot bei einpflegen neuer commands dann auch sofort beenden könnte, da (bei mir jedenfalls) meißtens kleine tipp-fehler auftauchen).
gibt es eine möglichkeit den zu includenen code vorher auf parse errors zu testen?
dann könnte man das auch mit include() realisieren

achja: ich wollte mich mal bei allen bedanken die auf meinen thread geantwortet haben
  Mit Zitat antworten
Alt 02.07.2005, 01:28  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Lascii
hmm es macht keinen unterschied...
Ja. <?php ?> wird überall verstanden, <? ?> nur von den Systemen, bei denen short_open_tag = On ist.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Firefox / IE - Probleme HTML, Usability und Barrierefreiheit 5 20.07.2009 17:04
eval, preg_match ? php phrasen ? ^^ notyyy PHP Tipps 2007 10 21.12.2006 16:24
Probleme bei Speicherung von serialize() Strings Manni2k PHP Tipps 2006 13 15.10.2006 15:06
Probleme mit mbstring extension unter Debian HStev Server, Hosting und Workstations 3 30.08.2006 20:55
Probleme mit Rechteverteilung chmod() per script!!!??? Funky_ PHP Tipps 2006 7 17.06.2006 17:10
Code per eval umsetzen und Funktion integrieren Tscheggi PHP Tipps 2006 6 10.05.2006 10:46
[Erledigt] Navigation auf Smarty umstellen?! PHP-Fortgeschrittene 3 10.01.2006 09:19
Probleme mit fopen, fread und fclose PHP-Fortgeschrittene 4 19.12.2005 14:37
array keys mit eval erzeugen ff-webdesigner PHP-Fortgeschrittene 4 22.10.2005 18:44
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
[Erledigt] hilfe! probleme mit... PHP Tipps 2005 4 12.04.2005 22:55
[Frage] Eval führt sich nur 1x aus danach ist ende... PHP Tipps 2005 4 17.03.2005 13:52
Probleme mit eval () Calli PHP Tipps 2005 12 03.01.2005 12:05
[Erledigt] Technische Probleme mit Sessions PHP-Fortgeschrittene 4 18.11.2004 14:45
PHP Bilder in DB / Probleme bei Änderung PHP-Fortgeschrittene 1 05.06.2004 11:20

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
eval fread, php irc bot mysql einträge an irc channel sendne, php unterschiede eval, irc fehler, irc parser error, rc bot funktioniert nicht, fread beispiel, php irc bot grundgerüst

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.