Forum: PC-Programmierung PHP: Maximale Stringlänge?


von Uhu U. (uhu)


Lesenswert?

Gibt es bei PHP eine Längenbegrenzung für Stringkonstanten?

von Test (Gast)


Lesenswert?

Keine Lust die Doku zu bemühen ?
http://php.net/manual/en/language.types.string.php

Denk aber an das Memory.limit in der PHP.ini ..

von Stryker_2k (Gast)


Lesenswert?

Laut Doku:
1
It is no problem for a string to become very large. PHP imposes no boundary on the size of a string; the only limit is the available memory of the computer on which PHP is running.

von Test (Gast)


Lesenswert?

Note: string can be as large as up to 2GB (2147483647 bytes maximum)
Aus der Doku unter http://php.net/manual/en/language.types.string.php

von Uhu U. (uhu)


Lesenswert?

Ich habe ein syntax recognition pattern von Dokuwiki mit print_r 
rausgeholt, um ein Benchmark damit zu füttern. Das Teil ist über 4500 
Zeichen lang und PHP meint, irgendwo einen Fehler darin zu finden. Die 
Fehlermeldung ist PHP-Mäßig:

PHP Parse error:  syntax error, unexpected ']' in bench-class.php on 
line 80

Die eröffnet bei 4500 Zeichen ungeahnte Möglichkeiten...

: Bearbeitet durch User
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Was willst Du denn mit einem String dieser Größe im Web anfangen ?

von Uhu U. (uhu)


Lesenswert?

Das macht Dokuwiki. Es ist ein einziges Pattern, mit dem die Wikiseiten 
nach Plugin-Befehlen durchsucht werden. Es wird aus Teilpatterns 
zusammengenagelt, die die Syntax-Plugins liefern.

Ich will damit testen, was es kostet, diese Patterns Unicode-fähig zu 
machen.

: Bearbeitet durch User
von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Da sind 2 GB aber etwas knapp ;)

von T.roll (Gast)


Lesenswert?

Joachim Drechsel schrieb:
> Was willst Du denn mit einem String dieser Größe im Web anfangen ?

Beispiel:
https://de.wikipedia.org/wiki/Spezial:L%C3%A4ngste_Seiten
‎Liste der DIN-Normen ‎807.303 Bytes, ziehen wir mal großzügig 100.000 
für Multibyte ab, sind das immer noch ~700.000 Zeichen.

Beim Speichern kommt das alles über $_POST['wpTextbox1'] in einem String 
rein.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Die eröffnet bei 4500 Zeichen ungeahnte Möglichkeiten...

Man könnte ja mal versuchen die umgebenden Code und ggf. einen Auschnitt 
zu veröffentlichen DAS wäre doch mal eine Möglichkeit.

Uhu Uhuhu schrieb:
> Ich habe ein syntax recognition pattern von Dokuwiki mit print_r
> rausgeholt

Aha, wieso print_r? Was hast du dann damit gemacht? Fragen über 
Fragen... die aber alle nicht auf eine Längenbegrenzung von Strings 
zurückzuführen sind...

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Man könnte ja mal versuchen die umgebenden Code und ggf. einen Auschnitt
> zu veröffentlichen DAS wäre doch mal eine Möglichkeit.

Ich glaub nicht, daß du mit einem Ausschnitt davon glücklich wirst und 
zur Lösung des Problems - es war ein ', das nicht escaped war - würde 
das sowieso nichts beitragen.

> Aha, wieso print_r?

Wieso nicht? Irgendwie mußte ich schließlich das aus einzelnen Fitzeln 
zusammengeschraubte Monster-Pattern aus lexer.php von Dokuwiki 
herausbekommen.

> Was hast du dann damit gemacht?

Ich hab die Wurst in meinen Benchmark-Code kopiert und bin jetzt dabei, 
ein einigermaßen realistisches Szenario zu basteln, um messen zu können, 
wie das Zeitverhalten von Singlebyte-Patterns im Vergleich zu 
Multibyte-Patterns ist.

> Fragen über Fragen... die aber alle nicht auf eine Längenbegrenzung von
> Strings zurückzuführen sind...

Letzteres herauszubekommen, habe ich hier gefragt uns schnell eine 
Antwort bekommen - vielen Dank dafür an die, die so schnell geantwortet 
haben.

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

T.roll schrieb:
> Beim Speichern kommt das alles über $_POST['wpTextbox1'] in einem String
> rein.

Du kennst den feinen Unterschied zwischen einem String und einer 
Stringkonstanten?

Daß eine Programmiersprache mit Riesenstrings klar kommt, heißt noch 
lange nicht, daß man den Riesenstring auch als String-Literal 
hinschreiben kann, ohne daß der Compiler - oder was auch immer da 
werkelt - den Löffel wirft.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Wieso nicht? Irgendwie mußte ich schließlich das aus einzelnen Fitzeln
> zusammengeschraubte Monster-Pattern aus lexer.php von Dokuwiki
> herausbekommen

Ein einfaches echo hätte es auch getan, print_r fügt ggf. noch 
zusätzliche Zeichen ein. Ansonsten wäre schreiben+lesen in eine Datei 
besser, da sparst du dir das escapen.

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Ein einfaches echo hätte es auch getan

Auch, um die Wurst ins Debuglog zu bringen?

Aber das Problem ist längst gelöst und die meine Frage war so gezielt, 
daß eine Themenausweitung rein gar nichts bringt.

: Bearbeitet durch User
von T.roll (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Du kennst den feinen Unterschied zwischen einem String und einer
> Stringkonstanten?

Nein erklär mir den Unterschied. (Vermutlich wegen $_POST?)

Und trotzdem. Wo der Text her kommt? Aus der DB und wird bei der Abfrage 
in einer Variable gespeichert und verarbeitet.

Uhu Uhuhu schrieb:
> PHP Parse error:  syntax error, unexpected ']' in bench-class.php on
> line 80

Ich sage jetzt einfach mal, dass du einen Programmierfehler hast. PHP 
parst Variablen nur! bei eval. Sonst ist ihm der Inhalt scheiß egal. 
Also wie bei allen anderen Anfängern auch: Zeig mal deinen Code.

von Uhu U. (uhu)


Lesenswert?

T.roll schrieb:
> Uhu Uhuhu schrieb:
>> Du kennst den feinen Unterschied zwischen einem String und einer
>> Stringkonstanten?
>
> Nein erklär mir den Unterschied. (Vermutlich wegen $_POST?)

Ein String zur Laufzeit wird ganz anders verarbeitet, als ein 
"String-Literal" (in " oder '): Der Compiler muß nicht unbedingt 2 GB 
String-Puffer bereithalten oder verwalten können, denn sowas ist in 
einem Quelltext doch eher exotisch.

Das Laufzeitsystem der Sprache hat ganz andere Anforderungen zu 
erfüllen, als der Compiler.

> Ich sage jetzt einfach mal, dass du einen Programmierfehler hast. PHP
> parst Variablen nur! bei eval. Sonst ist ihm der Inhalt scheiß egal.

Nein, das war ein ' im Patternstring, das natürlich nicht escaped war, 
weil print_r das nicht gemacht hat, als ich die Wurst dem Dokuwiki aus 
dem Bauch gezogen habe. Das Problem ist die Fehlermeldung, der man schon 
bei weniger unübersichtlichen Kontexten oft genug nicht genau entnehmen 
kann, wo genau das Problem gefunden wurde.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.