Was ist die Obergrenze für die Stringlänge in PHP?
Abfrage:
Können Sie Licht ins Dunkel bringen? die Grenzen der String-Speicherkapazität in PHP? Ich habe versucht, es abzuschätzen, bin mir aber nicht sicher, ob der Speicher meines Systems (2 GB) für den Test ausreicht. Gibt es eine vordefinierte Obergrenze? Welche Aktionen werden ausgeführt, wenn eine Zeichenfolge diesen Schwellenwert überschreitet – Verkettung oder ein Fehler?
Antwort:
Laut der Dokumentation von PHP.net wurden Einschränkungen der Zeichenfolgenlänge in PHP 7.0.0 beseitigt für 64-Bit-Builds. Bei 32-Bit-Builds und früheren Versionen konnten Zeichenfolgen eine maximale Größe von 2 GB (2147483647 Bytes) erreichen.
In PHP 5.x waren Zeichenfolgen auf 231-1 Bytes beschränkt Interner Code verfolgte ihre Länge in einer 32-Bit-Ganzzahl mit Vorzeichen.
Zusätzliche Überlegungen:
Sie können den Inhalt einer gesamten Datei mit Funktionen wie file_get_contents() laden. Die Gesamtspeicherzuweisung eines PHP-Skripts für alle Variablen begrenzt jedoch die Länge einzelner Zeichenfolgenvariablen.
Speicherbegrenzungsrichtlinie:
Die Anweisung „memory_limit“ in der Konfigurationsdatei php.ini legt dies fest Limit. Der Standardwert beträgt 128 MB in PHP 5.2 und 8 MB in früheren Versionen.
Wenn „memory_limit“ in php.ini nicht festgelegt ist, wird standardmäßig der kompilierte Wert in der PHP-Binärdatei verwendet, der durch Neukompilieren von PHP mit einem benutzerdefinierten Standardwert geändert werden kann .
Wenn Sie „memory_limit“ in php.ini auf -1 setzen, wird die Überprüfung deaktiviert und Ihr Skript kann so viel Speicher nutzen, wie das Betriebssystem zuweist (vorbehaltlich praktischer und systemspezifischer Einschränkungen).
Testbeispiel:
Der folgende Code zeigt, wie Speichernutzung und Zeichenfolgenzuordnungsgrenzen getestet werden:
// Limit memory usage to 1MB
ini_set('memory_limit', 1024*1024);
// Basic operation uses about 768KB
printf("memory: %d\n", memory_get_usage(true));
$str = str_repeat('a', 255*1024);
echo "Allocated string of 255KB\n";
// All 1MB of memory has been allocated
printf("memory: %d\n", memory_get_usage(true));
// Exceeding the limit causes a fatal error
$str = str_repeat('a', 256*1024);
echo "Allocated string of 256KB\n";
printf("memory: %d\n", memory_get_usage(true));
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3