Jak zjistit přítomnost souboru v jiné doméně ?

Dobrý den, ze svého webu poskytuju jinému webu (něco jako backend) výpis posledních pěti článků a posledních pěti příspěvků v diskuzních fóru. XML nechtěl, tak jsem to udělal tak, že si může můj soubor jednoduše includovat z mého webu. Přístup do mé databáze z venku je zakázaný.

Protože ale měl hosting, kde jsem nějaké problémy, nebyl můj web dostupný a kolegovi na jeho stránkách to PŘÍŠERNĚ zmršilo vzhled.

Proto se chci zeptat, jestli pro něj existuje nějaká možnost kontroly existence vzdáleného souboru. File_exists funguje jen v rámci domény.

Napadá mně obejít to pomocí fsockopen :

$fp = fsockopen ("http://www.domena.cz/export/skript.php", 80);
if (!$fp)
{
echo "<small>Chyba: vzdálený soubor není k dispozici.</small><br>\n";
}
else
{
include("http:/www.domena.cz/export/skript.php");
}

Může být ? Nebo raději jinak ?
Copak on si může z tvého serveru includovat nějak soubory?

Já bych to celé dělal přes socket. Připojil bych se k tvému serveru, vyžádal si stránku (pokud by tam nebyla, tak vypsat chybu) a z ní bych vybral dané věci nějakým algoritmem.

PAVEL
Copak on si může z tvého serveru includovat nějak soubory?
Může a dělá to...

A jak bys to řešil přes ten socket ? Na to jsem se ptal..
> $fp = fsockopen ("http://www.domena.cz/export/skript.php", 80);


to je blbe ne ? v php jsem to sice nikdy nepotreboval, ale rekl bych, ze soketove funkce o http nic nevi, takze ten pozadavek na konkretni soubor musi jit az jako "zprava" tim soketem
tj.

fputs($fp,"HEAD /export/skript.php\nHost:www.domena.cz\n\n");
a pak cist, co to vrati

cimz pripominam, ze fsockopen je docasne zakazany,
odvazuju si slibit, ze do konce tydne to pobezi - s rozumnymi limity na pocet a datovy tok spojeni
co takle
if($f=@fopen("http://..."))
{
...
fclose($f);
}
Tady je základní komunikace přes socket:

$host = "tvujweb.wz.cz";
$port = 80;

$fp = FSockOpen($host, $port);
if ($fp):
// POZADAVEK
$head = "GET http://$host/podadresar/soubor.php HTTP/1.0\n";
$head .= "Accept: text/*, text/html, */*\n";
$head .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; MSN 2.5; Windows 98)\n";
$head .= "Host: $host\n";
$head .= "Pragma: no-cache\n";
$head .= "\n";

FPuts($fp, $head);

// ODPOVED
$answer = "";
while ($line = FGetS($fp, 128)):
$answer .= $line;
endwhile;

/*
a teď si musíš z proměnné $answer vytáhnout vše co potřebuješ (pomocí řetězcových funkcí)
*/

FClose($fp);
else:
// chyba: nepodřilo se připojit k sereveru
endif;

PAVEL
pouzivej \r\n a ne jenom \n - at dodrzujes rcf :-) (see rfc2616)