あるドメインでGeoserverマップレイヤーをホストし、別のドメインでOpenLayers WMSGetFeatureInfoを介してそれらにアクセスするhtmlファイルに関連するクロスドメインの問題を回避しようとしています。もちろん、html ファイルが同じドメインにある場合は問題なく動作します(多角形をクリックすると、その機能の情報がポップアップ表示されます)。このサイトや他のサイトで同様の投稿をいくつか見ましたが、この問題を解決したものはありません:
http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://www.google.comなど、php プロキシを含む URL を送信すると、正常に動作します。しかし、http://greengeography.org/projects/oregonwild/curlproxy3.php?url=http://50.112.123.161:8080 などの Amazon EC2 サイト (Linux と Tomcat 6 を実行) から任意の URL を試すと、結果として 0 を取得します。そして、その IP アドレスは単独で問題なくアクセスできます。
これが私のphpです(get_file_contentsメソッドも試しました):
<?php
$url = $_REQUEST["url"];
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'POST HTTP/1.0',
'Content-type: text/xml;charset="UTF-8"',
'Accept: text/xml',
'Cache-Control: no-cache',
'Pragma: no-cache'
));
$theData = curl_exec($curl);
curl_close($curl);
echo $theData;
?>
そして私の OpenLayers/GeoExt:
OpenLayers.ProxyHost = "curlproxy3.php?url=";
var featureInfo = new OpenLayers.Control.WMSGetFeatureInfo({
url: 'http://50.112.123.161:8080/geoserver/OR_wild_wkspc/wms',
queryVisible: true,
FEATURE_COUNT: 1,
exceptions: "application/vnd.ogc.se_xml",
layerUrls: ["http://50.112.123.161:8080/geoserver/gwc/service/wms"],
eventListeners: {
getfeatureinfo: function(e) {
new GeoExt.Popup({
title: "Feature Info",
width: 400,
autoHeight: true,
autoScroll: true,
queryVisible: true,
map: map,
lonlat: mapPanel.map.getLonLatFromPixel(e.xy),
html: e.text
}).show();
}
}
});
mapPanel.map.addControl(featureInfo);
featureInfo.activate();
また、これは副次的な問題であり、プロキシが機能するようになるまで対処できないことをお詫びしますが、メイン サイトの機能をクリックすると、次のメッセージが表示されます: Uncaught TypeError: Cannot read property null の「x」。それを理解することもできませんでした。
何かご意見は?他のサイトを指しているプロキシには問題がないため、php ではなく、Tomcat または Linux/Amazon 環境の設定に問題があると考えています。ああ、私はPHPの経験がほとんどないので、可能であればそれを馬鹿にしてください。ありがとう!