php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.03.2011, 12:06  
woz
Neuer Benutzer
 
Registriert seit: 30.03.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
woz befindet sich auf einem aufstrebenden Ast
Standard cURL fügt auf einigen Servern ein "20 " an den Anfang und " 0" an das Ende hinzu

Hallo,

ich habe ein kleines Problem mit cUrl.
Zum Verständnis: es geht um eine Update-Funktion, die zum Schutz vor der Installation eines fehlerhaften Downloads die MD5-Summe mit der offiziellen vergleicht. Dazu fragt er natürlich die MD5-Summe vom offiziellen Server ab.
Ich dachte es beträfe nur einen falschkonfigurierten Server, habe es nun aber auch auf einem anderen beobachtet:
An die abgerufene Ausgaben von dem offiziellen Server wird an den Anfang "20 " und an das Ende " 0" angefügt. Die Rückgabe lautet also nicht "*MD5*" sondern "20 *MD5* 0".

Weiß jemand, woher dies kommen könnte und ob es sich beheben lässt oder ich für diesen Fall einfach den Fehler erkennen und dann wieder aus dem String löschen muss?
woz ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.03.2011, 12:12  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Toll das du sagst was du machst, fehlt nur leider das wie..

Ohne den Source wie du requestes werden das Schüsse ins Blaue.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 30.03.2011, 12:17  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

Also

1) Wenn da jedesmal die 20 davor und 0 dahinter kommt, das sehr einfach wegfiltern, da MD5 auch noch eine konstante Länge von 32 Byte hat.

2) vermutlich stammen die Zeichen vom Server, das Script gibt die entweder mit aus, oder aber du musst halt die cURL-Antwort korrekt beschneiden. Es kann zumindest sein, dass die Antwort eine Kombination aus dem HTML-Response-Code für OK (200) und deiner MD5 ist .... Vielleicht kommt die Antwort da zu einem unglücklichen Zeitpunkt ....
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 30.03.2011, 12:33  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Zitat von woz Beitrag anzeigen
An die abgerufene Ausgaben von dem offiziellen Server wird an den Anfang "20 " und an das Ende " 0" angefügt. Die Rückgabe lautet also nicht "*MD5*" sondern "20 *MD5* 0".

Weiß jemand, woher dies kommen könnte und ob es sich beheben lässt oder ich für diesen Fall einfach den Fehler erkennen und dann wieder aus dem String löschen muss?
Woher es kommt? Na, vom Server.. schreibst du ja selber schon. Dort (beim Betreiber des Server) würde ich mal nachfragen nach dem warum/wieso/weshalb.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 03.04.2011, 23:39  
woz
Neuer Benutzer
 
Registriert seit: 30.03.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
woz befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lstegelitz Beitrag anzeigen
Woher es kommt? Na, vom Server.. schreibst du ja selber schon. Dort (beim Betreiber des Server) würde ich mal nachfragen nach dem warum/wieso/weshalb.
Den offiziellen Server betreibe ich selbst.
Es ging aus meiner Beschreibung nicht ganz hervor, das Problem tritt bisher nur auf zwei Servern auf, auf vielen anderen nicht.
Der Server gibt also definitiv das richtige zurück, die entsprechende cURL-Rückgabe ist aber auf einigen Servern verfälscht.
Mein Programm (CMS) läuft bei vielen Kunden auf deren Servern und soll auch nach Abschluss des Auftrags up-to-date bleiben.

Zitat:
Zitat von eagle275 Beitrag anzeigen
2) vermutlich stammen die Zeichen vom Server, das Script gibt die entweder mit aus, oder aber du musst halt die cURL-Antwort korrekt beschneiden. Es kann zumindest sein, dass die Antwort eine Kombination aus dem HTML-Response-Code für OK (200) und deiner MD5 ist .... Vielleicht kommt die Antwort da zu einem unglücklichen Zeitpunkt
Ja, das habe ich auch vermutet. Daher auch meinerseits die Frage ob ich das rausfiltern kann.
Nur habe ich eben gehofft, dass es mir jemand mit Bestimmtheit sagen kann. Nicht, dass ich ein Katz- und Mausspiel mit diversen Rückgabe-Verfälschungen (z.B. andere HTTP-Codes) anfange.

Mein größtes Problem an der Sache ist aber: Die Funktion (siehe unten) wird ja nun häufiger benutzt. Nicht nur zum Abfragen der offiziellen MD5 benutzt, sondern z.B. auch zum Download des Updates. Ich kann also nicht einfach die 32 Stellen zwischen den beiden Leerzeichen nehmen. Wenn ich Pech habe sieht die Ausgabe ja irgendwann einmal tatsächlich so aus und es wird als Fehler interpretiert und rausgefiltert.

Geändert von woz (03.04.2011 um 23:56 Uhr).
woz ist offline   Mit Zitat antworten
Alt 03.04.2011, 23:41  
woz
Neuer Benutzer
 
Registriert seit: 30.03.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
woz befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von tr0y Beitrag anzeigen
Toll das du sagst was du machst, fehlt nur leider das wie..

Ohne den Source wie du requestes werden das Schüsse ins Blaue.
PHP-Code:
    protected static function get_remote_data$remote_file ) {
        if( 
ini_get('allow_url_fopen') && @file_get_contents'http://'$_SERVER['SERVER_NAME'] ) != false )
            
$data file_get_contents$remote_file );
        elseif( 
function_exists('curl_init') ) {
            
$ch curl_init();
            
curl_setopt$chCURLOPT_URL$remote_file );
            
curl_setopt$chCURLOPT_RETURNTRANSFER);
            
$data curl_exec$ch );
            
curl_close$ch );
        }
        else {
            
$url parse_url$remote_file );
            
$socket fsockopen$url['host'], 80 );
            if (
$socket) {
                
$out "GET /"$url['path'] .'?'$url['query'] ." HTTP/1.1\r\n";
                
$out .= "Host: "$url['host'] ."\r\n";
                
$out .= "Connection: Close\r\n\r\n";
                
fwrite$socket$out );
                
$data trimstrstrstr_replace"\r"""stream_get_contents$socket ) ), "\n\n" ) );
                
fclose$socket );
            }
        }
        return 
$data;
    } 
Ich vermute inzwischen, das Problem liegt im letzten else-Block, wo der HTTP-Request zusammengebaut und die Variable $data auf die Rückgabe gesetzt wird. Gibt es hier etwas, was ich über
Code:
stream_get_contents( $socket )
wissen sollte?

Geändert von woz (03.04.2011 um 23:49 Uhr).
woz ist offline   Mit Zitat antworten
Alt 04.04.2011, 10:15  
Erfahrener Benutzer
 
Registriert seit: 19.06.2009
Beiträge: 837
PHP-Kenntnisse:
Fortgeschritten
Jens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nettJens Clasen ist einfach richtig nett
Standard

Stimmt - Dein Problem liegt im letzten Abschnitt. Das hat nur nichts mit cURL zu tun. Im Gegensatz zu Teinem Replacement kanm cURL nämlich auch mit Daten was anfangen, die per chunked transfer-encoding übermittelt wurden. Das hast Du bei Deiner eigenen Implementierung allerdings vergessen. (Ursache für Deinen Zahlensalat)

Abhilfe: Wenn Du nen HTTP-Request per fsockopen() absetzen willst, dann kommst Du beim Verarbeiten der Antwort nicht darum herum, auch die Header auszuwerten und entsprechend zu decodieren. Außerdem solltest Du aufpassen, dass Du die richtigen Accept-Headerr mit in Deinen Request kleisterst, falls Du nur eine Untermenge des HTTP in Deinem Client implementierst. Ohne darf der gegnerische Server Dir nämlich durchaus auch gzip-komprimierte Daten schicken.

Gruß Jens
Jens Clasen ist offline   Mit Zitat antworten
Alt 04.04.2011, 17:40  
woz
Neuer Benutzer
 
Registriert seit: 30.03.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
woz befindet sich auf einem aufstrebenden Ast
Standard

Danke für deine Erklärung, Jens!
Wie kann ich denn Header von Body trennen?
woz ist offline   Mit Zitat antworten
Alt 04.04.2011, 17:43  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

http://forum.de.selfhtml.org/archiv/2002/10/t26179/
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 04.04.2011, 17:49  
woz
Neuer Benutzer
 
Registriert seit: 30.03.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
woz befindet sich auf einem aufstrebenden Ast
Standard

Danke tr0y!!
woz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] cURL Upload Probleme bei unterschiedlichen Servern iits PHP-Fortgeschrittene 3 25.10.2010 18:11
[Erledigt] Datei vom Ende bis zum Anfang ausgeben? Alecane PHP Tipps 2010 3 16.03.2010 09:49

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php webserver fügt 0, curl header body trennen, curl anfang, php curl transfer closed sonderzeichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:32 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum