Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Warum das nich geh???



LinuxNewbee
15-12-2002, 09:17
hallo! ich habe auf www.icooc.com eine txt datei liegen serverip.txt.
auf cve.icooc.com liegt folgendes skript:



$fp = fopen("http://www.icooc.com/serverip.txt","r");
$IP = fread ($fp, 700);
fclose($fp);

$IP = strchr($IP,"80.143.");
$Adress = explode(" ",$IP);
$IP = $Adress[0];


So jetzt müsste er die IP haben oder nicht???
wenn ich jetzt ein echo http//$IP/blablabla.php müsste er doch eigentlich den server finden oder?
dat luppt aber nich!

Gaert
15-12-2002, 11:19
Bei mir funktioniert dein Skript....

Ich würds anstatt http//$IP/blablabla.php mal mit http://$IP/blablabla.php versuchen.

Schreib mal das unten an das Skript dran:



header("Location:http://$IP");

Dann müsste er dich eigentlich auf die IP weiterleiten.

LinuxNewbee
15-12-2002, 19:50
funz aber nich! auf meinem lokalen webserver läufts! komisch, komisch!
naja ich werd noch n bisl basteln...

The Ripper
16-12-2002, 11:08
vielleicht ist der URL-Wrapper auf www.icooc.com deaktiviert, dann kannst du Dateien auf anderen Servern nicht mit fopen() öffnen.

LinuxNewbee
16-12-2002, 15:17
ja ich denke auch! Das wirds wohl sein! danke muss ich mir ne andere lösung einfallen lassen... jemand ne idee?

jwebworks
16-12-2002, 15:59
hol dir die datei per ftp oder sowas rüber.

The Ripper
16-12-2002, 17:33
Naja, wenn dein Server Sockets in PHP unterstützt, dann könnte dir das helfen:


function http_get($server, $file) {
$socket=fsockopen($server, 80);

if (!$socket)
return false;

fputs($socket, "GET /$file\r\n");

$in="";
while(!feof($socket)) {
$in.=fgets($socket, 4096);
}

fclose($socket);

return $in;
}

$ip=http_get("www.icooc.com", "serverip.txt");
if ($ip === false)
echo "Fehler";
else
echo $ip;

LinuxNewbee
16-12-2002, 18:34
hhmm, hab noch nie mit sockets gearbeitet! ich werd mich das mal reinknien, bis morgen...

LinuxNewbee
17-12-2002, 14:37
dat funzt leider auch nich! krieg da irgend'n wirschen html quelltext raus, der absolut nicht in der Datei steht! na egal!

The Ripper
17-12-2002, 22:22
Diese Kontent-Dokument-Nicht-Gefunden-Seite? Die hab ich auch rausbekommen, vielleicht wurde die Datei mittlerweile gelöscht?

mehlvogel
17-12-2002, 22:57
mit



<?php
$file_content = file("http://www.icooc.com/serverip.txt");
echo implode("", $file_content);
?>


Ging das ganz wunderbar auszugeben. Aber von wo führst du denn das Script aus, welches das Textfile öffnen soll?

LinuxNewbee
18-12-2002, 08:37
Also das Skript wird von www.icooc.com ausgeführt, welche bei Kontent gehostet ist!
Das muss so sein, da die icooc.com Domain die feste IP hat und beim DeNic eingetragen ist! unser SienceServer hängt nur via T-DSL im Internet und updatet sein IP bei jeder Änderung in der serverip.txt Datei auf dem icooc Server.

Der Server cve.icooc.com, der ebenfalls bei Kontent gehostet ist, soll nun auch die IP vom SienceServer wissen, um Projekte die gerade in Arbeit sind erfassen zu können.

Also muss das Skript von cve.icooc.com aufgeführt werden, welches sich dann die IP aus der Datei auf dem icooc.com Server holt um dann auf den T-DSL ScienceServer zugreifen zu können.

So der Stand momentan!

The Ripper
18-12-2002, 10:56
Dieses 404-Dokument, das du angezeigt bekommen haben müsstest (zumindest war das bei mir so, natürlich ohne die Grafiken!) lässt erst einmal darauf schliessen, dass die Datei serverip.txt nicht im DocumentRoot des icooc.com-Webservers liegt. Also quasi sowas wie "Datei nicht gefunden".

Warum das, obwohl die Datei auf dem Server liegt (habs mit Telnet und HTTP 1.0-Anfragen ausprobiert)?
Naja, Kontent benutzt anscheinend virtuelle Server mit einer IP, deshalb müssen wir dem Server noch explizit mitteilen, von welchem Server wir die Datei haben wollen (also aus welchem DocumentRoot ;)).

Dazu müssen wir innerhalb der Funktion HTTP 1.0 benutzen, was das ganze etwas aufbläht:


<?

function http_get($server, $file) {
$socket=fsockopen($server, 80);

if (!$socket)
return false;

// HTTP 1.0-Anfrage
fputs($socket, "GET /$file HTTP/1.0\r\nHost: $server\r\n\r\n");

// Rückgabewert empfangen und auswerten
$retcode=fgets($socket, 4096);

$ret = explode(" ", $retcode);

if ($ret[1] != "200") // != 200 bedeutet "Datei nicht gefunden" o.Ä.
return false;

// Header empfangen und auswerten
while(!feof($socket)) {
$header=fgets($socket, 4096);
if ($header == "\r\n") // Der Header endet mit eienr Leerzeile
break;
}

// Daten empfangen
$in="";
while(!feof($socket)) {
$in.=fgets($socket, 4096);
}

fclose($socket);

return $in;
}

$ip=http_get("www.icooc.com", "serverip.txt");
if ($ip === false)
echo "Fehler";
else
echo $ip;

?>


Das mit der file()-Funktion geht übrigens nur, wenn die fopen-Wrapper aktiviert sind, wenn du Glück hast, führt aber eventuell ein Aufruf von
ini_set("allow_url_fopen", "1");
zum Erfolg ;)

mehlvogel
18-12-2002, 13:09
Ist die Subdomain zufällig auf den gleichen Server (gleiche IP) gemappt und dabei vielleicht sogar zufällig auf ein Unterverzeichnis des DocumentRoot? (Es gibt nen ganzen Satz die das so machen)

Dann würde ein einfaches



$fh = fopen("/pfad/zur/datei/serverip.txt");
// oder
$fh = fopen("../serverip.txt");


Theoretisch doch reichen oder, seh ich das falsch? Dann bräuchte man diesen ganzen Kram von wegen HTTP Header auswerten, etc pp nicht.

The Ripper
18-12-2002, 16:32
Nur wenn open_basedir nicht gesetzt ist :)