Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用fsockopen从xml站点地图加载url_Php_Fsockopen - Fatal编程技术网

Php 如何使用fsockopen从xml站点地图加载url

Php 如何使用fsockopen从xml站点地图加载url,php,fsockopen,Php,Fsockopen,我试图将每个url加载到一个sitemap.xml文件中,以预缓存它们并加快用户体验 我有以下代码从站点地图中获取URL $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=1j1agloz

我试图将每个url加载到一个sitemap.xml文件中,以预缓存它们并加快用户体验

我有以下代码从站点地图中获取URL

$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>";    
}
但这给了我每个url的一个错误:

[12-May-2011 13:34:09]PHP警告:fsockopen()[function.fsockopen]:无法连接到第32行的/home/digital1/public_html/dev/sitemap.PHP中的(找不到套接字传输“http”-配置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部分,并试图。。。它将:/web/ui.xql?action=html&resource=login.html附加到url的末尾,url是我们的登录页面,因此它必须看到我们的服务器

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 Set Cookie:JSESSIONID=nh62zih3q8mf;路径=/位置:内容长度:0


谢谢。

fsockopen不用于HTTP请求, 卷曲是一个更好的选择(而且更强大)

还有文件获取内容,可以使其快速:

foreach ($xml->url as $url_list) {
    $url = $url_list->loc;
    file_get_contents($url);
}

用于应用程序缓存预热!

为什么不使用curl获取这些url?…请注意,在服务器端获取这些url不会加快“用户体验”因为它不会影响浏览器的缓存Hi,这不是我们正在尝试创建的浏览器缓存。该应用程序会在查看页面时动态创建DITA XML缓存页面。我们正在尝试预填充该页面。您介意给我更多有关此方法的信息吗?您已经使用了Curl来获取站点地图,您只需调整此方法即可e获取你想要的URL。更多信息:谢谢,我明天会试试这个。
foreach ($xml->url as $url_list) {
    $url = $url_list->loc;
    file_get_contents($url);
}