FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

php global-scope fehler?

php global-scope fehler? 2007-03-08 11:34
Anonymer User
ich hab so etwas:

$stripedlines; function striphtmlout($filetoOpen){ $fd = fopen ($filetoOpen, "r"); while (!feof ($fd)){ global $stripedlines; $buffer = fgets($fd, 4096); $lines = $buffer; $stripedlines = strip_tags($lines); } fclose ($fd); return stripedlines; }seltsamerweise wird mit $stripedlines = strip_tags($lines);die globale var $stripedlines nicht überschrieben - return liedert mir auf jeden fall etwas leeres zurück - woran kann das liegen ?

Re: php global-scope fehler? 2007-03-08 11:37
Anonymer User
ok beim return das $ vergessen - klappt aber immer noch nicht…

mein aufruf:

$file = "test.html"; echo striphtmlout($file);

Re: php global-scope fehler? 2007-03-08 11:51
jfk
Meine PHP-Zeit liegt zwar schon ein wenig zurück und globale Variablen hab ich eigentlich nie benötigt… aber warum muss die Variable denn überhaupt global sein? Kannst du nicht einfach das lokale Ergebnis zurückgeben?

Re: php global-scope fehler? 2007-03-08 11:57
Anonymer User
Meine PHP-Zeit liegt zwar schon ein wenig zurück und globale Variablen hab ich eigentlich nie benötigt… aber warum muss die Variable denn überhaupt global sein? Kannst du nicht einfach das lokale Ergebnis zurückgeben?

hmm - weil es nicht klappt [img]http://fb18.triphoenix.de/gfx/26.gif[/img]

$file = "test.html"; function striphtmlout($filetoOpen){ $fd = fopen ($filetoOpen, "r"); while (!feof ($fd)){ $buffer = fgets($fd, 4096); $lines = $buffer; $stripedlines = strip_tags($lines); } fclose ($fd); return $stripedlines; } echo striphtmlout($file);
-zeigt mir nur ne leere seite… (muss ja aber auch so sein schließlich ist stripedlines innerhalb der while-schleife declariert und instanziiert…),
nur warum kann ich dann nicht überschreiben?!

Re: php global-scope fehler? 2007-03-08 12:11
Popcorn
Mach mal aus dem = in $stripedlines = strip_tags($lines); ein .=
Außerdem würde ich die global-Anweisung an den Funktionsstart und nicht in die While-Schleife legen.

Re: php global-scope fehler? 2007-03-08 12:17
Anonymer User
das geglobal hatte ich auch schon außerhalb der while gesetzt - hatte alleine nichts geholfen aber der .= - tip war goldrichtig!

weiss jetzt nicht warum es unter php nicht anders geht, aber auch gut…

danke

Re: php global-scope fehler? 2007-03-08 12:18
Popcorn
weiss jetzt nicht warum es unter php nicht anders geht, aber auch gut…
= weist der Variable jedes Mal einen neuen Wert zu. .= Fügt einen String an.

das geglobal hatte ich auch schon außerhalb der while gesetzt
Das Global sollte aus Performancegründen trotzdem außerhalb der While-Schleife stehen. Funktioniert genau so. :-)

Re: php global-scope fehler? 2007-03-08 12:40
jfk
Damit ich auch noch was dazu lerne: Das heißt ohne global geht es nicht?

Re: php global-scope fehler? 2007-03-08 12:58
tilo
function striphtmlout($fileToOpen) { $stripedlines = ""; $fd = fopen ($fileToOpen, "r"); while (!feof ($fd)) { $buffer = fgets($fd, 4096); $lines = $buffer; $stripedlines .= strip_tags($lines); } fclose ($fd); return $stripedlines; }
sollte funktionieren ..

Re: php global-scope fehler? 2007-03-08 13:00
tilo
Wenn du das irgendwo in ner Klasse benutzen willst:
class Test { function Test() { $this->stripedlines = ""; } function striphtmlout($fileToOpen) { $fd = fopen ($fileToOpen, "r"); while (!feof ($fd)){ $buffer = fgets($fd, 4096); $lines = $buffer; $this->stripedlines .= strip_tags($lines); } fclose ($fd); return $this->stripedlines; } } $foo = new Test(); echo $foo->striphtmlout("datei.html");

Re: php global-scope fehler? 2007-03-08 13:49
Anonymer User
warum funktioniert so etwas:
preg_match_all($pattern, $page, $treffer, PREG_OFFSET_CAPTURE); print_r($treffer[1][0]);zeigt mir dann die arraystruktur.

aber so etwas nicht:
echo($treffer[1][0]); ?

krieg da immer nur Array als Output…

Edit: [Smilies] in Text gewandelt.

Re: php global-scope fehler? 2007-03-08 13:52
Anonymer User
warum funktioniert so etwas:
preg_match_all($pattern, $page, $treffer, PREG_OFFSET_CAPTURE); print_r($treffer(1)(0));zeigt mir dann die arraystruktur.

aber so etwas nicht:
echo($treffer (1)(0) ); ?

krieg da immer nur Array als Output…

edit: jetzt mit (,) statt Kästchen - wie kann man die hier escapen?

Re: php global-scope fehler? 2007-03-08 14:05
Popcorn
Damit ich auch noch was dazu lerne: Das heißt ohne global geht es nicht?
Wie Tilo gezeigt hat. Ansonsten ist - nur auf den Ausschnitt bezogen - der Aufbau natürlich auch noch knapper möglich:
$fd = fopen ('test.html', 'r'); while (!feof ($fd)) { echo strip_tags(fgets($fd, 4096)); } fclose ($fd);Wäre das Gleiche, dann halt fast ganz ohne Variable.

edit: jetzt mit (,) statt Kästchen - wie kann man die hier escapen?
Die Checkbox [Smilies] in Text wandeln anwählen, gleich unter den Smilies.


Re: php global-scope fehler? 2007-03-08 14:12
Popcorn
Also das Echo hatte mich eben wirklich gewundert, weshalb ich es selbst probiert habe, bis ich dann die Klammern darum bemerkte. :-) Echo ist keine Funktion, die gehören da nicht hin:

echo $treffer[1][0];

Edit: Oh, funktioniert auch mit. PHP Manuell sagt, das auch. Brauchen nicht hingeschrieben werden, können aber. Muss bei Dir einen anderen Grund haben, wieso das nicht geht.
$text = "17-02-06, 10-03-83, 24-12-00"; preg_match_all("/(\d+)-(\d+)-(\d+)/", $text, $array); print $array[0][0] echo ($array[0][0]);Gibt zwei Mal 17-02-06 aus.

Re: php global-scope fehler? 2007-03-09 16:38
tilo
warum funktioniert so etwas:
preg_match_all($pattern, $page, $treffer, PREG_OFFSET_CAPTURE); print_r($treffer(1)(0));zeigt mir dann die arraystruktur.

aber so etwas nicht:
echo($treffer (1)(0) ); ?

krieg da immer nur Array als Output…

edit: jetzt mit (,) statt Kästchen - wie kann man die hier escapen?

Für den Array-Zugriff verwendet man eckige Klammern []

Also $treffer[1][0]

Re: php global-scope fehler? 2007-03-09 17:05
Popcorn
Weiß er doch. Er wusste bloß nicht, wie wie er die eckigen Klammern hier nutzen kann.

Re: php global-scope fehler? 2007-03-09 18:41
tilo
Ups, dann hab ioch das überlesen :-)