CURLOPT_FOLLOWLOCATION无法激活

所以我不断得到这个恼人的错误在多个服务器(它的警告,所以我会忽略它,但我需要的function)

警告:当启用safe_mode或者在第56行的/home/xxx/public_html/xxx.php中设置了open_basedir时,curl_setopt()[function.curl-setopt]:CURLOPT_FOLLOWLOCATION无法激活

我将如何去解决这个通过SSH?

在你的php.ini文件中设置safe_mode = Off (通常在服务器的/ etc /目录下)。 如果已经closures,那么在php.ini文件中查找open_basedir东西,并相应地改变它。

基本上,跟踪位置选项已被禁用作为安全措施,但PHP的内置安全function通常比安全更恼人。 事实上, safe_mode 在PHP 5.3中已经被弃用了 。

试试这个,如果需要redirect并且启用了安全模式,它将会根据标题的链接进行操作(如果你抓取的图像不能用,因为它会把标题添加到返回中),这是解决你的特定问题的一种方法,我有同样的问题,当客户安装我的脚本之一,所以不得不拿出这个..它也将logging错误: curl.error.log ..有用的呃

 <?php function geturl($url) { (function_exists('curl_init')) ? '' : die('cURL Must be installed for geturl function to work. Ask your host to enable it or uncomment extension=php_curl.dll in php.ini'); $curl = curl_init(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 Firefox/5.0'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); curl_setopt($curl, CURLOPT_HEADER, true); curl_setopt($curl, CURLOPT_REFERER, $url); curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); curl_setopt($curl, CURLOPT_AUTOREFERER, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); //curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //CURLOPT_FOLLOWLOCATION Disabled... curl_setopt($curl, CURLOPT_TIMEOUT, 60); $html = curl_exec($curl); $status = curl_getinfo($curl); curl_close($curl); if ($status['http_code'] != 200) { if ($status['http_code'] == 301 || $status['http_code'] == 302) { list($header) = explode("\r\n\r\n", $html, 2); $matches = array(); preg_match("/(Location:|URI:)[^(\n)]*/", $header, $matches); $url = trim(str_replace($matches[1],"",$matches[0])); $url_parsed = parse_url($url); return isset($url_parsed) ? geturl($url) : ''; } $oline=''; foreach ($status as $key => $eline) { $oline .= '['.$key.']'.$eline.' '; } $line = $oline." \r\n ".$url."\r\n-----------------\r\n"; $handle = @fopen('./curl.error.log', 'a'); fwrite($handle, $line); return false; } return $html; } 

要解决这个问题,只要把safe_mode = Off并清空php.ini文件中的open_base_dir

只要在php.ini文件中启用open_basedir或safe_mode ,就不能使用CURLOPT_FOLLOWLOCATIONconfiguration。 要改变这些设置,我只能给一般说明:

  1. SSH到服务器
  2. cd到Linux目录(通常是/ etc / php5,取决于你的发行版或操作系统),它包含php.ini
  3. sudo编辑(例如, sudo nano php.ini )。
  4. 编辑指定open_basedir或safe_mode的行并将其closures。

记得在之后重启你的httpd!