Seite 1 von 1
mit php inhalt einer externen datei auslesen
Verfasst: 17.05.2006 15:17
von Spezial
moin!
also wie ich mittlerweile festgestell habe geht das mit fsockopen() etc. also, einen port zum internet öffnen, eine bestimmte datei auf einem bestimmten server zu öffnen und den inhalt auszulesen...jetzt wollte ich fragen, ob es eine möglichkeit gibt, so eine seite zu öffnen und dann ein sich dortbefindiges post-formular auszufüllen und abzuschicken? und ist es dann widerum auch noch möglich, dass was in einer bestimmten datei steht auszulesen und je nachdem, was dort steht, eine andere ausgabe zu machen?
versteht ihr das? ^^ wenn ja, kann mir evtl. jemand erklären wie dsa geht? (:
greetz
Verfasst: 17.05.2006 16:17
von Sebastian R.
Du bist dir sicher, dass du weißt was fsockopen() macht? Die Socket-Funktionen bieten dir bei PHP nur eine Schnittstelle um per TCP oder UPD (bzw. irgendeinem anderen Protokoll) zu kommunizieren. Um eine Datei auf einem Webspace abzufragen (downzuloaden) müsstest du FTP Zugang haben und würdest dann per FTP-Protokoll auf die Datei zugreifen.
Da du aber Formulare ausfüllen willst, kannst du diese Funktionen nicht benutzen, denn sie bieten dir keine Browser-Schnittstelle, sondern nur Funktionen für TCP etc.
Verfasst: 17.05.2006 16:56
von fanrpg
Erzähl mal keinen Mist
mit fsockopen() kann man auch eine http Abfrage ausführen.
mit fputs() einfach dann einen dementsprechenden POST Header senden.
Verfasst: 17.05.2006 16:58
von Spezial
Ne, bin ich ja eben nicht sicher

Verstehs sowieso net ganz richtig so...Aber man kann schon mit PHP, irgendwie eine Seite im Internet öffnen, oder? Wie macht z.B. phpBB das, im ACP wo es auf die neueste Version prüft? Da wird auch einfach nur der Inhalt der Textdatei:
http://www.phpbb.com/updatecheck/20x.txt ausgelesen und anhand dieser erkannt ob die aktuellste Version da ist. Also, wie macht es das, wenn es nur über FTP geht? Im Quelltext steht an dieser Stelle:
Code: Alles auswählen
// Check for new version
$current_version = explode('.', '2' . $board_config['version']);
$minor_revision = (int) $current_version[2];
$errno = 0;
$errstr = $version_info = '';
if ($fsock = @fsockopen('www.phpbb.com', 80, $errno, $errstr, 10))
{
@fputs($fsock, "GET /updatecheck/20x.txt HTTP/1.1\r\n");
@fputs($fsock, "HOST: www.phpbb.com\r\n");
@fputs($fsock, "Connection: close\r\n\r\n");
$get_info = false;
while (!@feof($fsock))
{
if ($get_info)
{
$version_info .= @fread($fsock, 1024);
}
else
{
if (@fgets($fsock, 1024) == "\r\n")
{
$get_info = true;
}
}
}
@fclose($fsock);
usw...
edit:
fanrpg hat geschrieben:Erzähl mal keinen Mist
mit fsockopen() kann man auch eine http Abfrage ausführen.
mit fputs() einfach dann einen dementsprechenden POST Header senden.
Und wie genau sende ich dann den POST header? Also wie setze ich die einzelnen POST-variablen? ^^ danke schonmal (:
greetz
Verfasst: 17.05.2006 19:05
von Pyramide
Installier dir am besten mal das Firefox-Plugin
LiveHTTPHeaders, dort kannst du genau sehen was beim Aufrufen von Seiten bzw. Abschicken von Formularen übertragen wird, das musst du dann nur noch nachbauen.
Alternativ lies die Doku, sprich die RFC für
HTTP 1.0 und
1.1 - das ist aber etwas aufwändiger

Verfasst: 17.05.2006 20:15
von Sebastian R.
fanrpg hat geschrieben:Erzähl mal keinen Mist
mit fsockopen() kann man auch eine http Abfrage ausführen.
mit fputs() einfach dann einen dementsprechenden POST Header senden.
Klar, aber kein Formular ausfüllen!
Außer du übergibst die Parameter direkt an ein php-Skript.
Verfasst: 17.05.2006 20:50
von fanrpg
Sebastian R. hat geschrieben:fanrpg hat geschrieben:Erzähl mal keinen Mist
mit fsockopen() kann man auch eine http Abfrage ausführen.
mit fputs() einfach dann einen dementsprechenden POST Header senden.
Klar, aber kein Formular ausfüllen!
Außer du übergibst die Parameter direkt an ein php-Skript.
Kommt das nicht am Ende aufs selbe raus?

Verfasst: 17.05.2006 21:08
von Spezial
also muss ich dann via fputs sowas in der art übergeben:
Code: Alles auswählen
Content-Type: application/x-www-form-urlencoded
Content-Length: XX
variable=value&variable_zwei=value_zwei
XX muss ich dann nur noch ersetzen mit der länge der kompletten zeile?
ist das so richtig?
greetz