0

事前にキャッシュしてユーザーエクスペリエンスを高速化するために、sitemap.xmlファイルの各URLを読み込もうとしています。

サイトマップから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>";    
}

そして今、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";
    }
}

しかし、これは私に各URLに対してこのエラーを与えています:

[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(32行目の/home/digital1/public_html/dev/sitemap.phpでソケットトランスポート "http"が見つかりません-PHPを構成したときに有効にするのを忘れましたか?)

「fsockopen呼び出しのURLではなく、ホスト名だけです。実際のHTTPヘッダーのホスト/ポートを差し引いたURIを指定する必要があります」と読みました

だから私はこれを試しました:

 $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.htmlURLの最後にログインページなので、サーバーが表示されている必要があります...

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; Path = /場所:http:///content/en/FAMILY-201103311115/Family_FLJONLINE_FLJ_2009_07_4/web/ui.xql?action = html&resource = login.html Content-Length:0

ありがとう。

4

1 に答える 1

1

fsockopenはHTTPリクエストに使用されることを意図していないため、Curlの方が適しています(そしてはるかに強力です)。

それを速くすることができるfile_get_contentsもあります:

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

アプリケーションキャッシュのウォーミングアップに役立ちます!

于 2011-05-12T14:59:19.133 に答える