Hallo, ich habe folgendes Problem. So wie ich die Dokumentationen von PHP4 verstehe sollte eine Binary wie folgt geschrieben werden können: $x = fopen("http://www.foo.de/foto.jpg", "rb"); $y = fopen("/var/www/htdocs/websites/plakatmotiv/daspm.jpg", "wb"); if (!fwrite($y, $x)) echo "schreiben nicht erfolgreich!"; else echo "schreiben erfolgreich!"; fclose($y); fclose($x); Hierbei kommt stehts ein schreiben erfolgreich. Jedoch steht nicht das JPG in der Datei sonder diese Datei ist ein Textfile (obwohl ich es mit "wb" geöffnet habe). Im Textfile steht drin: "Resource id #2". Wie schaffe ich es ein Binary (in diesem Fall ein JPG) von einer URL zu laden und auf die Festplatte unter einem anderem Namen zu speichern??? Ich hoffe es kann mir jemand von Euch helfen ... leider finde ich keine Lösung. tia Oli
Hi Tim.
ich habe folgendes Problem. So wie ich die Dokumentationen von PHP4 verstehe sollte eine Binary wie folgt geschrieben werden können:
$x = fopen("http://www.foo.de/foto.jpg", "rb"); $y = fopen("/var/www/htdocs/websites/plakatmotiv/daspm.jpg", "wb"); if (!fwrite($y, $x)) echo "schreiben nicht erfolgreich!"; else echo "schreiben erfolgreich!"; fclose($y); fclose($x);
Hierbei kommt stehts ein schreiben erfolgreich. Jedoch steht nicht das JPG in der Datei sonder diese Datei ist ein Textfile (obwohl ich es mit "wb" geöffnet habe). Im Textfile steht drin: "Resource id #2".
Wie schaffe ich es ein Binary (in diesem Fall ein JPG) von einer URL zu laden und auf die Festplatte unter einem anderem Namen zu speichern???
Du hast das Lesen vergessen. $x enthält ein Resource-Handle (was als Text ausgedrückt etwas wie "Resource idä #...." ergibt. Und diese Zeichenkette schreibst Du in die zweite Datei. Was Du aber wirklich schreiben willst, ist der binäre INHALT des Bildes. Und dazu musst Du von $x lesen. Am besten wohl mit: $inhalt = fread( $x, 1000000 ); oder mit einer kleineren Blockgrösse in einer Schleife. Und $inhalt schreibst Du dann nach $y, wie oben. Gutnacht -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Seelig sind die, die da arm an Geist sind, denn sie werden 4 sich Christlich Soziale Union nennen.
Am Mittwoch, 16. März 2005 01:54 schrieb Bodo Kaelberer:
Du hast das Lesen vergessen. $x enthält ein Resource-Handle (was als Text ausgedrückt etwas wie "Resource idä #...." ergibt. Und diese Zeichenkette schreibst Du in die zweite Datei. Was Du aber wirklich schreiben willst, ist der binäre INHALT des Bildes. Und dazu musst Du von $x lesen.
Ah, Vielen Dank! Das war die Lösung. Ich dachte das würde PHP automatisch erkennen ... bin wohl von JAVA etwas verwöhnt ... :-(
Am besten wohl mit: $inhalt = fread( $x, 1000000 ); oder mit einer kleineren Blockgrösse in einer Schleife.
Und $inhalt schreibst Du dann nach $y, wie oben.
klappt prima. Jedoch verstehe ich nicht warum es geht mit: $handle = fopen("http://foo.de/bar.jpg", "rb"); $y = fopen(getcwd() . "/files/foobar.jpg", "wb"); while (!feof($handle)) { $x .= fread($handle, 8192); } if (!fwrite($y, $x)) echo "schreiben nicht erfolgreich!"; else echo "schreiben erfolgreich!"; fclose($y); fclose($handle); und nicht auch mit: $handle = "http://foo.de/bar.jpg", "rb"; $y = getcwd() . "/files/foobar.jpg", "wb"; copy ($x, $y); Auf meinem Rechner hier local funktioniert das copy auch prima. Jedoch funkioniert es leider nicht auf dem Webserver ... :-( Dies verstehe ich jedoch nicht ... denn wenn das eine funktioniert, dann sollte das Andere doch auch funktionieren. Zumal es ja auch local funktioniert. Kennt jemand einen Grund für dieses Verhalten? tia Oli
Hallo Tim Oliver, Tim Oliver Wagner schrieb:
Jedoch verstehe ich nicht warum es geht mit: $handle = fopen("http://foo.de/bar.jpg", "rb"); $y = fopen(getcwd() . "/files/foobar.jpg", "wb"); while (!feof($handle)) { $x .= fread($handle, 8192); } if (!fwrite($y, $x)) echo "schreiben nicht erfolgreich!"; else echo "schreiben erfolgreich!"; fclose($y); fclose($handle);
und nicht auch mit: $handle = "http://foo.de/bar.jpg", "rb"; $y = getcwd() . "/files/foobar.jpg", "wb"; copy ($x, $y);
Auf meinem Rechner hier local funktioniert das copy auch prima. Jedoch funkioniert es leider nicht auf dem Webserver ... :-(
Dies verstehe ich jedoch nicht ... denn wenn das eine funktioniert, dann sollte das Andere doch auch funktionieren. Zumal es ja auch local funktioniert.
Kennt jemand einen Grund für dieses Verhalten?
steht im Manual ( http://php.net/manual/de/function.copy.php ): Zitat: "Anmerkung: Ab PHP 4.3.0 können die Parameter source und dest auch URLs sein, wenn "fopen wrappers" aktiviert ist. Weitere Details hierzu finden Sie unter fopen(). Ist dest eine URL, könnte der Kopiervorgang scheitern, sollte der Wrapper das Überschreiben von existierenden Dateien nicht unterstützen." schöne Gruße Gregor
Am Mittwoch, 16. März 2005 11:36 schrieb Gregor Schatz:
Hallo Tim Oliver,
Tim Oliver Wagner schrieb:
und nicht auch mit: $handle = "http://foo.de/bar.jpg", "rb"; $y = getcwd() . "/files/foobar.jpg", "wb"; copy ($x, $y);
steht im Manual ( http://php.net/manual/de/function.copy.php ): Zitat: "Anmerkung: Ab PHP 4.3.0 können die Parameter source und dest auch URLs sein, wenn "fopen wrappers" aktiviert ist. Weitere Details hierzu finden Sie unter fopen(). Ist dest eine URL, könnte der Kopiervorgang scheitern, sollte der Wrapper das Überschreiben von existierenden Dateien nicht unterstützen."
Danke für die Antwort. Jedoch ist die Source die URL, daher trifft diese Bemerkung nicht auf mein Problem zu. :-( Ich verstehe nicht warum das eine funktioniert und das andere nicht. Naja, immerhin funktioniert die andere Lösung ... besser als wenn keine funktionieren würde. :-) merci nochmal Oli
Ups, noch eines wollt ich sagen, ich schätze deine locale config und die am webserver sind nicht so ganz gleich, könnten auch die php-versionen sein eventuell mal ausgabe von phpinfo() und/oder php.ini dateien vergleichen... Grüße Gregor
participants (3)
-
Bodo Kaelberer
-
Gregor Schatz
-
Tim Oliver Wagner