easy_svg_pro_import_max_total_bytes
Begrenze die Bytes, die Easy SVG Pro aus einem ZIP-Import liest, damit ein Archiv, das klein tut, nicht den Speicher deines Servers aufbraucht.
Filter · Easy SVG Pro · Status: Stabil
Ein ZIP kann behaupten, seine Dateien seien klein, und trotzdem zu sehr vielen Daten entpacken. Easy SVG Pro zählt deshalb die Bytes, die es wirklich aus einem Archiv liest, und hört bei 16 MB auf. Dieser Filter legt die Zahl fest.
Verwendung
apply_filters( 'easy_svg_pro_import_max_total_bytes', int $bytes )
Angewendet in includes/editor/set-import.php, in zip_entries_from_path(). Das Ergebnis wird in eine Ganzzahl umgewandelt.
Wann du es brauchst
- Ein großes Set (viele detaillierte Icons) hört vor den letzten Icons auf und du hast Speicher übrig.
- Du willst auf einem Host mit kleinem PHP-Speicherlimit eine niedrigere Grenze.
- Du hast
easy_svg_pro_import_max_entriesangehoben und brauchst Platz für die zusätzlichen Dateien.
Nicht dafür gedacht:
- Eine Datei wird wegen ihrer eigenen Größe abgelehnt. Das ist die Grenze pro Datei des kostenlosen Plugins,
easy_svg_max_bytes, eingestellt unter Icons → Einstellungen. - Der Upload selbst scheitert. PHPs
upload_max_filesizeundpost_max_sizestoppen die Anfrage, bevor dieser Code läuft.
Parameter
Die Gesamtzahl an Bytes, die aus einem Archiv gelesen wird, gezählt an dem, was wirklich gelesen wurde, nicht an dem, was das ZIP angibt. Standard ist 16777216.
Rückgabewert
Die Gesamtgrenze in Bytes. Wird nicht begrenzt: 0 heißt, schon der erste Eintrag überschreitet sie und nichts wird importiert.
Standardwert
16777216 (16 MB).
Beispiele
Platz für ein großes Set auf einem großzügigen Host
/**
* 32 MB Icons. Der Host hat ein Speicherlimit von 512 MB.
*/
function acme_import_max_total_bytes( $bytes ) {
return max( $bytes, 32 * MB_IN_BYTES );
}
add_filter( 'easy_svg_pro_import_max_total_bytes', 'acme_import_max_total_bytes' );
Am Speicherlimit ausrichten
/**
* Höchstens ein Viertel des Speicherlimits, weil die Bytes etwa dreifach im Speicher liegen.
*/
function acme_import_max_total_bytes_by_memory( $bytes ) {
$limit = wp_convert_hr_to_bytes( (string) ini_get( 'memory_limit' ) );
if ( $limit <= 0 ) {
// -1 heißt unbegrenzt. Standard behalten.
return $bytes;
}
return max( MB_IN_BYTES, min( $bytes * 4, (int) floor( $limit / 4 ) ) );
}
add_filter( 'easy_svg_pro_import_max_total_bytes', 'acme_import_max_total_bytes_by_memory' );
Beide Grenzen zusammen anheben
function acme_big_imports( $value ) {
return 'easy_svg_pro_import_max_entries' === current_filter() ? 6000 : 48 * MB_IN_BYTES;
}
add_filter( 'easy_svg_pro_import_max_entries', 'acme_big_imports' );
add_filter( 'easy_svg_pro_import_max_total_bytes', 'acme_big_imports' );
So funktioniert es
Die Grenze sitzt im einen ZIP-Leser, den alle Importwege teilen: Set-Import, Paket-Upload unter Icons → Pakete, der Font-Awesome-Import, Preset-Installationen und wp easy-svg pack import.
Der Leser geht das Archiv der Reihe nach durch. Er liest jede .svg-Datei und manifest.json, die die Prüfungen pro Eintrag bestehen, und addiert die Länge dessen, was er wirklich gelesen hat, zu einer laufenden Summe. Übersteigt die Summe deine Grenze, fällt der Eintrag weg, der sie überschritten hat, und das Lesen endet. Alles, was bis dahin gelesen wurde, wird normal importiert.
Der Standard ist 16 MB und nicht mehr, weil die Bytes beim Import etwa dreifach im Speicher liegen: roh, mit Labels und nach dem Bereinigen vorbereitet. Gemessen wurden für 64 MB Icons rund 192 MB Speicher, bei einem WordPress-Standardlimit von 40 MB.
Stolperfallen
- Der Abbruch ist still. Einträge nach der Grenze werden nie gelesen und deshalb auch nicht als abgelehnt gelistet. Der Import sieht vollständig aus, nur kleiner.
- Dreifacher Speicher. Eine Grenze von 64 MB braucht beim Import rund 200 MB PHP-Speicher.
- Null blockiert jeden Import. Gib eine positive Zahl zurück.
- Nicht die Upload-Grenze. Scheitert der Upload im Browser, heb die Upload-Einstellungen von PHP an, nicht diesen Filter.