Zweifel über das speichern von SVG-Dateien und abrufen
Machte ich ein system, dass ein Benutzer lädt eine Gerber-Datei (Printed circuit board-format), und dann habe ich konvertieren mit PHP, die Datei (GCode) zu SVG.
Ich bin mit einem problem konfrontiert, nun, das ist eigentlich ein Architektur problem.
Soll ich das speichern der SVG in einer Datei oder auf die Datenbank?
Und sollte ich wieder die SVG als JSON-like ({name: test, Daten: SVGFILEGOESHERE}) oder einfach machen wie eine .svg? Ich meine, ist JSON sicher genug für ein BIG-data-Struktur?
EDIT:
Die Konvertierte SVG werden in vielen Ansichten in der website, wie z.B.: Produkte, Seiten, konfigurieren, Seiten... Es ist nicht nur ein mal...
Die Grundidee, senden der GCode an den server, und sobald jemand verlangt, dass die Datei, wenn es nicht gerendert ist, dann macht es, und speichert das SVG auf die Datenbank oder in eine Datei, und speichern Sie einen cache, um zu vermeiden, re-Bearbeitung der gleichen Datei mehrmals.
SVG, würde abgerufen werden, mit ajax, und auch gerendert eingefügt auf der Seite (aber ich denke, dass ich alles laden mit ajax).
Mal die Datei zum server gesendet werden, werden nicht GEÄNDERT, sondern nur gelöscht werden können, und erneut gesendet...
Dank
- Die Antwort hängt stark von der beabsichtigten Verwendung der von Ihnen erzeugten SVG. Würden Sie sagen?
- Ausarbeitung....
Du musst angemeldet sein, um einen Kommentar abzugeben.
Update
Für das, was Sie tun, würde ich empfehlen die Aufbewahrung der SVG als separate Datei und Rückgabe nur der SVG als Bild (Tipp:
header("Content-type: image/svg+xml");
in PHP).Als eine Randnotiz, Sie sagte
The SVG, would be retrieved with ajax, and also rendered with PHP on the page.
Dies ist nicht ganz richtig; SVG ist eine text - /XML-Datei. PHP nicht Rendern der SVG, es sendet nur den code der SVG-Datei an den client. Der client-Maschine muss werden, die man zum analysieren der SVG-code und stellen ihn als ein sichtbares Bild auf dem client.Ursprüngliche Antwort
Die Antwort: es hängt davon ab,. Sie haben nicht uns, viel weiter zu gehen.
Das SVG-Format ist ASCII-text, der Art wie HTML. Sie können lernen, mehr hier. Als solche, es gibt nichts "falsch" mit dem senden einer SVG-Datei im JSON-Format, so stellen Sie sicher, dass alle Zitate sind frei.
JSON ist gut für große Strukturen; das Problem ist nicht die Größe, es ist die Zeit, die es braucht, um es zu senden, vom server auf den client und dann die Zeit, die es dauert, javascript zu Parsen von JSON und Rendern der SVG als Bild. Ich weiß nicht was dein setup ist, oder wie groß die SVG-Dateien sind, aber für sehr große SVG-Bildern, möchten Sie vielleicht, um Sie in einer separaten Anforderung, gibt nur die SVG-also dem client-Rechner ist nicht die Zeit, die zum Parsen der JSON. Sie haben zu tun, performance-Tests auf Ihre Anwendung, um zu sehen, was am besten für Ihre Bedürfnisse.
Für das speichern der SVG als Datei oder in der Datenbank, es hängt von der Datenbank, wie viel Speicher Sie hat für die Indizierung und das, wie die Indizes erstellt werden, egal ob SQL oder NoSQL, oder wie viel Speicher es hat, wie viel traffic Sie auf der Website haben, wie Sie eine Sicherung der Datenbank und/oder Dateien, etc etc. Die Leute haben verwendet Datenbanken zum speichern der thumbnails für user-images, so kann es die meisten halten definitiv SVG-Dateien. Es hängt alles davon ab, wie schnell und stabil die Datenbank ist. Persönlich, ich bevorzugen Sie Bilder und große Mengen von text in separaten Dateien auf der Festplatte.
Hängt es auf (mindestens) zwei Dinge:
Wenn die SVG-Daten später geändert werden kann, würde ich es speichern in der Datenbank. JSON-Daten sollten in Ordnung sein es.
Wenn Sie denken, Sie gehen zu bekommen eine Menge traffic, dann würde ich persönlich nicht speichern es in die Datenbank, es sei denn, Sie haben gute caching-Mechanismen. Ich bin mir nicht sicher, ob Sie MySQL verwenden, aber der query-cache in MySQL vielleicht nicht allzu glücklich über die Zwischenspeicherung großer Datenmengen.
Was würde ich persönlich tun ist, speichern Sie die SVG in einer Datei, und speichern Sie es in einer Weise, dass es abgerufen werden kann, basierend auf den zugehörigen Datensatz in der Datenbank, d.h.
/uploads/svg/$username/$circuitboardid.svg
Wenn Sie viele Benutzer (über 30.000), Ihre svg-Verzeichnis wird riesig und je nach Dateisystem können Sie Dateien pro Ordner beschränkt.
Habe ich erreicht dies durch die Verwendung der folgenden code-Abschnitte in php und mySQL-Datenbank :
Denken Sie zuerst an svg ist im Grunde gespeichert im text-genau wie HTML ist auch. Und svg-tags, alle werden es verschiedene, ausgelegt sind, sehr ähnlich wie HTML-tags.
Speicherung in der Datenbank. Sie müssen verwenden Sie die folgende code-segment in der eigentlichen mySQL-Insertcall. Ich fand heraus, wenn Sie dies tun, um die variable zuerst und setzen Sie dann die variable im Aufruf einfügen, wird es nicht funktionieren. Die Funktion muss in der mySQL-Anweisung.
mysql_real_escape_string($myValue)
Abrufen In textbox-Wert. Vorausgesetzt, Ihre Werte wurden bereits aus der Datenbank abgerufen und in ein array mit dem Namen theValues. Grundsätzlich bin ich Entfernen Sie alle Schrägstriche aber vor der hand, ich bin sicher, dass es korrekt dargestellt werden kann mit htmlentities. Da Sie keine umgekehrten Schrägstriche in svg, dass ich weiß, wie es behoben werden, in denen die Server ersetzen, die Anführungszeichen mit \". Wenn Sie Begegnung einige Backslashes in svg-Sie müssen nur ein bisschen mehr, clever in Ihre Ersatz-Funktion.
$myValue= str_replace("\\", "", htmlentities($theValues->myValue));
echo $myValue;
echo auf eine Seite gleichen Gründen wie oben, aber die htmlentities-Funktion Macht es nur den text anzuzeigen, der von der svg Anstelle der Verarbeitung der svg-Und anzeigen Ihren Bild. dies ist nur erforderlich für die Anzeige von svg nach dem text der wurde in einer Datenbank gespeichert, aber es wird nicht Schaden Ihrem display, Wenn es nicht die Daten der ersten, nur Ein unnötiger Aufruf der Funktion .
str_replace("\\", "",$myValue)