关于php curl获取301或302转向的网址问题的解决方法

  在使用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,(一般国外主机商都是用这配置)如果获取的网址有301/302跳转,会报错:

  curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in ***

  关于这个问题,google,百度一下,都是在大篇长长的english,不精通linux的还真头痛。

  解决办法其实很简单:登陆你的 directadmin

  找到 ->>"PHP SafeMode Configuration" -->>看下图

  

关于php curl获取301或302转向的网址问题的解决方法

  把默认的 Default SafeDefault Open BaseDir OFF,问题就解决了。