phpのcurlを使用してリモートファイルを取得する場合、コードは次のようになります:
$ghurl = isset($_GET["id"]) ? $_GET["id"]:"http://www.baidu.com/"; // php 获取 function getContents($url){ $header = array("Referer: http://www.baidu.com/"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER,$header); curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1); //是否抓取跳转后的页面 ob_start(); curl_exec($ch); $contents = ob_get_contents(); ob_end_clean(); curl_close($ch); return $contents; } $contents = getContents($ghurl); echo $contents; ?> |
一般的に、win2003+iis では、php_curl.dll を設定しておけば問題ありません。
ただし、作成者は linux+apahe2.0+php5.2.12+directadmin を使用しています (通常、外国のホスティング会社はこの構成を使用します)。取得した URL に 301/302 ジャンプがある場合、エラーが報告されます。
curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in *** |
この問題に関しては、Google や Baidu で検索すると、英語で長い記事が見つかります。Linux に習熟していない人にとっては、本当に頭が痛いでしょう。
解決策は実際には非常に簡単です。directadmin
にログインします。検索 ->>「PHP セーフモード構成」 -->>下の図を見てください
デフォルトの Default Safe と Default Open BaseDir を OFF に設定します。問題は解決しました。