Gibt es eine Möglichkeit, auf einen string wie ein filehandle in php?
Ich bin auf einem server wo ich bin beschränkt auf PHP 5.2.6, was bedeutet, str_getcsv ist mir nicht verfügbar. Ich bin mit, statt fgetcsv erfordert "Eine gültige Datei-Zeiger auf eine Datei erfolgreich geöffnet von fopen(), popen () oder fsockopen()." zu operieren.
Meine Frage ist: gibt es eine Möglichkeit, auf einen string als Datei-handle?
Meine andere option ist, um zu schreiben string aus einer text-Datei, und greifen Sie dann via fopen()
und verwenden Sie dann fgetcsv
, aber ich hoffe, es gibt einen Weg, dies zu tun direkt, wie in perl.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einen Blick in die user-notes im manual Seite für
str_getcsv
, finden Sie dieser Hinweis von daniel, die schlägt vor, diese Funktion (zitieren) :Scheint es zu sein, genau das tun, was Sie wollte : es verwendet einen stream, der auf eine temporäre filehandle in Speicher, zu verwenden
fgetcsv
drauf.Sehen PHP input/output streams für die Dokumentation über die unter anderem die
php://temp
stream wrapper.Natürlich, sollten Sie testen, dass es funktioniert OK für dich-aber zumindest dies sollte Ihnen eine Idee geben, wie das zu erreichen ist 😉
php://memory
- der einzige Vorteil zuphp://temp
ist, nachdem die Datei überschreitet die ausgewiesene Größe ist, wird es auf Disk schreiben; wenn Sie unter Datei-Größe, es bleibt vollständig im Arbeitsspeicher.fopen("php://output", 'r+');
verwendet, aber deine Lösung ist besser, weil es nicht stört mit dem main-Ausgang.Zur Beantwortung Ihrer Allgemeinen Frage, ja, Sie können gönnen Sie sich eine variable wie einen Datei-stream.
http://www.php.net/manual/en/function.stream-context-create.php
Folgende ist eine Kopie und paste von ein paar verschiedenen get Kommentare über das PHP-Handbuch (ich kann also nicht dafür verbürgen, wie die Produktion es fertig ist):
Natürlich, für Ihre besonderen Beispiel, es gibt einfachere stream-Methoden, die verwendet werden können.
Ich bin entsetzt, dass noch niemand beantwortet hat diese Lösung:
- Und Speicher-hungrig perfekte Lösung:
?>
data://
Ansatz, die zur Verfügung gestellt$string
sollte sein Prozent-verschlüsselt, bevor Sie zugeführt wirddata://
. Siehe php.net/manual/en/wrappers.data.php#100979.Können Sie stream Griffe wie php://memory zu erreichen, was Sie wollen. Öffnen Sie einfach, fwrite, Zurückspulen, und Sie sollten in der Lage sein zu verwenden fgetcsv.
Leider ist das nicht möglich. Sie nicht behandeln, eine Zeichenkette als ob es ein stream aus einer Datei. Sie würde tatsächlich zuerst schreiben Sie die Zeichenfolge in einer Datei, und öffnen Sie dann diese Datei mit
fopen
.Und jetzt für den offensichtlichen Teil, haben Sie als Upgrade?