我正在尝试将每个 url 加载到 sitemap.xml 文件中,以预先缓存它们并加快用户体验。
我有以下代码从站点地图中获取网址
$ch = curl_init();
/**
* Set the URL of the page or file to download.
*/
curl_setopt($ch, CURLOPT_URL, 'http://onlineservices.letterpart.com/sitemap.xml;jsessionid=1j1agloz5ke7l?id=1j1agloz5ke7l');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);
$xml = new SimpleXMLElement($data);
foreach ($xml->url as $url_list) {
$url = $url_list->loc;
echo $url ."<br>";
}
我现在正在尝试使用 fsockopen 依次加载每个 url。
其中 $url 采用以下格式: http://onlineservices.letterpart.com:80/content/en/FAMILY-201103311115/ Family_FLJONLINE_FLJ_2009_07_4
foreach ($xml->url as $url_list) {
$url = $url_list->loc;
$fp = fsockopen ($url,80);
if ($fp) {
fwrite($fp, "GET / HTTP/1.1\r\nHOST: $url\r\n\r\n");
while (!feof($fp)) {
print fread($fp,256);
}
fclose ($fp);
} else {
print "Fatal error\n";
}
}
但这给了我每个网址的这个错误:
[2011 年 5 月 12 日 13:34:09] PHP 警告:fsockopen() [function.fsockopen]:无法连接到http://onlineservices.letterpart.com:80/content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4: -1(无法找到套接字传输“http” - 您在配置 PHP 时是否忘记启用它?)在第 32 行的 /home/digital1/public_html/dev/sitemap.php
我读过我需要:“只是主机名,而不是 fsockopen 调用中的 URL。您需要提供 uri,减去实际 HTTP 标头中的主机/端口”
所以我尝试了这个:
$fp = fsockopen ("http://onlineservices.letterpart.com",80);
if ($fp) {
fwrite($fp, "GET / HTTP/1.1\r\nHOST: content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4\r\n\r\n");
while (!feof($fp)) {
print fread($fp,256);
}
fclose ($fp);
} else {
print "Fatal error\n";
}
但我仍然得到同样的错误。
编辑:
如果我将 fsockopen 调用更改为:
$fp = fsockopen ("onlineservices.letterpart.com",80);
然后我得到一个稍微不同和更好但仍然错误的反应。它似乎忽略了 onlineservices.letterpart.com 部分并尝试http:///content/但是......它已附加:/web/ui.xql?action=html&resource=login.html 到他的网址末尾是我们的登录页面,所以它必须看到我们的服务器......
HTTP/1.1 302 临时移动日期:2011 年 5 月 12 日星期四 14:40:02 GMT 服务器:Jetty/5.1.12(Windows 2003/5.2 x86 java/1.6.0_07 到期时间:1970 年 1 月 1 日星期四 00:00:00 GMT设置 Cookie:JSESSIONID=nh62zih3q8mf;Path=/ 位置:http:///content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4/web/ui.xql?action=html&resource=login.html内容长度:0
谢谢。