php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 23-09-2009, 22:38
Ackergaul
 Registrierter Benutzer
Links : Onlinestatus : Ackergaul ist offline
Registriert seit: Jul 2007
Beiträge: 8
Ackergaul ist zur Zeit noch ein unbeschriebenes Blatt
Standard Externes Bild per PHP herunterladen

Hallo,
ich versuche mittels PHP externe Bilder auf meinen Server zu laden. Leider passiert es bei manchen Bildern, dass am unteren Teil ein schwarzer Balken auftritt. Hier mal ein Beispiel:

Original: http://phys.bspu.unibel.by/hist/phys.../phys/hund.jpg
Gespeicherte Version: http://www.pictureshunt.com/admin/hund-28.jpg

Mein Code:
PHP-Code:
$data file_get_contents($external_file);
file_put_contents($local_file$data); 
Habe schon diverse Methoden zum speichern und das Ganze auch auf meinem Localhost ausprobiert, am Ergebnis hat sich nichts geändert. Zu sagen wäre noch, dass der Balken beim gleichen Bild nicht willkürlich auftritt sondern ich jedes mal exakt das gleiche Ergebnis erhalte, unabhängig davon mit welcher Methode und wie oft ich es probiere. Hat jemand eine Idee?

Viele Grüße!
Mit Zitat antworten
  #2 (permalink)  
Alt 24-09-2009, 00:36
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Hallo,

ist das Bild ein konstruiertes Beispiel, um das Problem zu verdeutlichen oder entspricht das einem tatsächlichen Fehlerfall?

Gruß,

Amica
Mit Zitat antworten
  #3 (permalink)  
Alt 24-09-2009, 00:49
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Ackergaul Beitrag anzeigen
ich versuche mittels PHP externe Bilder auf meinen Server zu laden.
Mit Erlaubnis der Gegenseite(n) hoffentlich?

Was auffällt ist, dass die Original-Ressource mit einer angegebenen Content-Length von 53.898 Bytes ausgeliefert wird, deine jedoch nur mit 38.385.

Ausserdem befindet sich am Ende deiner Ressource eine lange Sequenz der Byte-Folge "51 40 05 14" - aber ich habe keine spontane Idee, was genau das zu bedeuten hat.

Zitat:
Habe schon diverse Methoden zum speichern und das Ganze auch auf meinem Localhost ausprobiert, am Ergebnis hat sich nichts geändert. Zu sagen wäre noch, dass der Balken beim gleichen Bild nicht willkürlich auftritt sondern ich jedes mal exakt das gleiche Ergebnis erhalte, unabhängig davon mit welcher Methode und wie oft ich es probiere.
Vielleicht gibt es ein Problem mit der HTTP-Kommunikation zwischen den beiden Gegenstellen.
Wenn das Problem bei dir sowohl auf deinem Server als auch lokal auftritt - dann wird es wohl eher beim externen Server liegen.

Passiert das denn nur mit Bildern von diesem einen Server, oder auch mit welchen von anderen?
Gibt es eine bestimmte Ressourcengrösse, unter der das Problem nicht auftritt, und ab der schon? (Oder ggf. umgekehrt.) (Zugegeben, recht schwer zu testen, man müsste erst mal Bildressourcen in unterschiedlichen Dateigrössen finden, die einen Schluss zulassen.)

Ich weiss nicht, ob PHP seinen eigenen HTTP-Traffic irgendwo loggt/loggen kann. Ein Auszug des Access-Logs der Gegenseite wäre sicherlich interessant. (Wenn man den beim konkret getesteten Server nicht in die Finger kriegen kann, wäre eine Nachstellung des Problems auf einem anderen "eigenen" Server hilfreich.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 24-09-2009, 01:38
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Ausserdem befindet sich am Ende deiner Ressource eine lange Sequenz der Byte-Folge "51 40 05 14" - aber ich habe keine spontane Idee, was genau das zu bedeuten hat.
Dass der schwarze Balken kein Übertragungsfehler, sondern absichtlich gemacht ist.
Mit Zitat antworten
  #5 (permalink)  
Alt 24-09-2009, 02:01
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Dass der schwarze Balken kein Übertragungsfehler, sondern absichtlich gemacht ist.
Was veranlasst dich zu der Annahme?

Erscheint mir eher unwahrscheinlich - zumindest wenn er vor der JPEG-Komprimierung in die Bilddaten eingefügt worden wäre, dann würde das bedeuten, dass diese nicht viel taugt, wenn sie eine Bytesequenz derart oft wiederholt ...
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #6 (permalink)  
Alt 24-09-2009, 02:19
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Was veranlasst dich zu der Annahme?

Erscheint mir eher unwahrscheinlich - zumindest wenn er vor der JPEG-Komprimierung in die Bilddaten eingefügt worden wäre, dann würde das bedeuten, dass diese nicht viel taugt, wenn sie eine Bytesequenz derart oft wiederholt ...
Meine zwei Vermutungen:

a) der Fragesteller hatte grad kein Beispiel parat und hat eins konstruiert, um uns zu zeigen, was er meint.
b) Der Bildanbieter verfälscht die Bilder mit PHP, wenn zu viele Anfragen vom selben Server kommen.

Der Balken wurde definitiv vor der Komprimierung eingefügt. JFIF ist nicht gleich ZIP und sowohl der Farbraumtransformation, als auch der DCT als auch der Quantisierungsmatrix ist herzlich egal, ob da jetzt ein 8x8 Pixel Block schwarz ist oder hunderte. Und ob eine Komprimierung was taugt oder nicht, hängt vom konkreten Anwendungsfall ab. JFIF ist nun mal für Fotos konzipiert worden und GIF schneidet bei einem Foto dafür noch schlechter ab als JFIF bei Nicht-Fotos.

Und wenn es ein Übetragungsfehler sein sollte, ist es extrem unwahrscheinlich, dass dabei aus dem ursprünglichen Kommentar ein anderer wird, der zudem noch als Produktname einer bekannten Grafikbibliothek lesbar ist.

Geändert von AmicaNoctis (24-09-2009 um 02:21 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 24-09-2009, 02:50
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Und wenn es ein Übetragungsfehler sein sollte, ist es extrem unwahrscheinlich, dass dabei aus dem ursprünglichen Kommentar ein anderer wird, der zudem noch als Produktname einer bekannten Grafikbibliothek lesbar ist.
Oha, stimmt - diese Diskrepanz war mir gar nicht aufgefallen.

Dann scheint mir dein b) aber doch nicht so wahrscheinlich, denn darauf würde man als (mental gesunder) Betreiber der Original-Seite vermutlich anders reagieren (schon allein, um Traffic zu sparen - ein 403 wäre doch eine sehr viel billigere Ohrfeige, als ein "haha, ich hab schwarze Balken ins Bild gemacht, damit du viel Zeit damit verbringen kannst, nach dem vermeintlichen Fehler zu suchen").

Damit scheint mir, wenn's nicht a) ist,
c) der Fragesteller macht noch andere Sachen mit dem Bild (wissentlich oder nicht), nachdem er es "heruntergeladen" geladen hat, die uns bisher nicht bekannt sind
noch die wahrscheinlichste Variante.


OffTopic:
Hach, macht spekulieren Spaß. Hoffentlich "versaut" es der Fragesteller nicht zu bald durch detailiertere Infos
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #8 (permalink)  
Alt 24-09-2009, 02:58
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
Damit scheint mir, wenn's nicht a) ist,
c) der Fragesteller macht noch andere Sachen mit dem Bild (wissentlich oder nicht), nachdem er es "heruntergeladen" geladen hat, die uns bisher nicht bekannt sind
noch die wahrscheinlichste Variante.


OffTopic:
Hach, macht spekulieren Spaß. Hoffentlich "versaut" es der Fragesteller nicht zu bald durch detailiertere Infos
Die Idee hatte ich auch schon, aber daran stören mich drei Dinge:

1.) Warum sollte er sowohl file_get_contents als auch file_put_contents im Code anführen, wenn keins von beidem für die Benutzung der GD-Funktionen Sinn macht (höchstens ersteres, wenn er das Bild aus nem String lädt)?

2.) Sollte es ihm nicht eigentlich komisch vorkommen, wenn er ein imagefill benutzt, obwohl er gar nichts flooden will?

3.) Warum sollte er zwei Mal hintereinander imagecopyresampled mit falschen Koordinaten benutzen? (Von einem Aufruf allein bekommt man so einen schwarzen Balken nicht hin.) Edit: während meiner Rauchpause ist mir eingefallen, dass es doch mit nur einem Aufruf gehen müsste: wenn man für das Quellbild ne falsche Höhe angibt.

Mir macht's auch Spaß

Geändert von AmicaNoctis (24-09-2009 um 03:06 Uhr)
Mit Zitat antworten
  #9 (permalink)  
Alt 24-09-2009, 03:21
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
2.) Sollte es ihm nicht eigentlich komisch vorkommen, wenn er ein imagefill benutzt, obwohl er gar nichts flooden will?
imagefill - wo?


Warum sollte der Bildanbieter, so dieser wirklich selber das Bild verfälscht ausliefert, weil ihm die Details des Requests oder die Frequenz dieser nicht gefallen, im "Fehlerfalle" ein Bild ausliefern, das von den Maßen her geringfügig kleiner ist als das Original ...? (Original 425*600, Kopie 423*598)

Zitat:
Mir macht's auch Spaß
Ich komm mir auch gerade vor, als würd' ich bei Akte X und CSI gleichzeitig mitspielen
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #10 (permalink)  
Alt 24-09-2009, 03:28
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von wahsaga Beitrag anzeigen
imagefill - wo?
Weiß ich nicht, in dem Quelltext, den er uns nicht verraten hat. Das ist nur ne Vermutung, wo der schwarze Balken herkommt.

Zitat:
Zitat von wahsaga Beitrag anzeigen
Warum sollte der Bildanbieter, so dieser wirklich selber das Bild verfälscht ausliefert, weil ihm die Details des Requests oder die Frequenz dieser nicht gefallen, im "Fehlerfalle" ein Bild ausliefern, das von den Maßen her geringfügig kleiner ist als das Original ...? (Original 425*600, Kopie 423*598)
Keine Ahnung, aber das ist das was für Punkt 3 spricht.

Zitat:
Zitat von wahsaga Beitrag anzeigen
Ich komm mir auch gerade vor, als würd' ich bei Akte X und CSI gleichzeitig mitspielen
Als Gil Mulder oder Fox Grissom?

Regards,

Sara Scully
Mit Zitat antworten
  #11 (permalink)  
Alt 24-09-2009, 12:42
Ackergaul
 Registrierter Benutzer
Links : Onlinestatus : Ackergaul ist offline
Registriert seit: Jul 2007
Beiträge: 8
Ackergaul ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank für die Antworten.

Das Beispiel oben ist nicht konstruiert sondern es zeigt exakt das Bild wie ich es vom Script erhalte. In der Tat wird nach dem Upload das Bild noch verkleinert, das Bild weist direkt nach dem Download aber schon den schwarzen Balken auf, bevor es an meine Funktion cropImage übergeben wird.
Hier ist der komplette Code:

PHP-Code:
$connection_id ftp_connect($ftp_server);
        
$login_result ftp_login($connection_id$ftp_user$ftp_pass);
        
        for(
$i=1;$i<=10;$i++) {
        
            if ((isset(
$_POST['url_' $i])) AND (!isset($_POST['delete_' $i]))) {
            
                if (
$i == 1)
                    
$_POST trimForm($_POST);
            
                
$part1 explode('/'$_POST['url_' $i]);
                
$anz count($part1);
                
$part2 explode('.'$part1[$anz-1]);
                
                
#var_dump($part);
                
                
$sql 'SELECT id FROM images ORDER BY id DESC LIMIT 1';
                
$res q($sql);
                
$row fetch($res);
                
                
$nextID $row['id']+1;
                
                
$filename strtolower($_POST['name_' $i]);
                
$filename str_replace(' ''_'$filename);
                
$filename $filename '-' $nextID '.' $part2[1];
                
                
$destination_file 'pics/' $filename[0] . '/' $filename;
                
$external_file $_POST['url_' $i];
                
$local_file $filename;
                
$data file_get_contents($external_file);
                
file_put_contents($local_file$data);
                
cropImage(''''$filename);
                
$upload ftp_put($connection_id$destination_file$local_fileFTP_BINARY);
                
unlink($local_file);
                
                
$sql 'INSERT INTO images (file_url_old, file_name, file_type, name, tags) 
                        VALUES ("' 
$_POST['url_' $i] . '", "' $imageserver_url $filename[0] . '/' $filename '", "' $part2[1] . '", "' $_POST['name_' $i] . '", 
                        "' 
$_POST['tags_' $i] . '")';
                
$res q($sql);                
            
            }                
        }
        
        
ftp_quit($connection_id); 

Um direkt etwaigen Spekulationen vorzubeugen, hier 4 Versionen des Bildes wie es als $local_file abgespeichert wird:
http://www.pictureshunt.com/admin/hund-28.jpg
http://www.pictureshunt.com/admin/hund-31.jpg
http://www.pictureshunt.com/admin/hund-33.jpg
http://www.pictureshunt.com/admin/hund-35.jpg

Nach mehreren weiteren Versuchen kann ich noch sagen, dass das Problem, wenn es denn auftritt, nur Bilder im Hochformat betrifft. Wenn ein Bild betroffen ist, erhalte ich jedes mal exakt das gleiche Ergebnis. Es ist also nicht so, dass das Problem beim gleichen Bild mal auftritt und dann wieder nicht.

Viele Grüße!

EDIT: Argh, ich bin doof. Es scheint doch an meiner Funktion cropImage zu liegen, ich habe nicht bedacht, dass diese ja mein Bild $local_file überschreibt

Geändert von Ackergaul (24-09-2009 um 12:48 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kursdaten herunterladen Maranello-550 Apps und PHP Script Gesuche 0 03-08-2006 22:38
[Funktion] Externes Bild abspeichern djdirek PHP Developer Forum 9 29-09-2005 22:01
Externes Bild in php ausgeben djdirek PHP Developer Forum 9 30-08-2005 21:37
Externes Bild überprüfen PHPbeginner PHP Developer Forum 19 22-07-2005 10:39
webcam Bild automatisch herunterladen lachesis Apps und PHP Script Gesuche 0 12-07-2004 16:38

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:00 Uhr.