所以,我不斷收到多個服務器上的這個惱人的錯誤(它的一個警告,所以我會忽略它,但我需要的功能)CURLOPT_FOLLOWLOCATION不能被激活
警告:curl_setopt()[function.curl -setopt]:CURLOPT_FOLLOWLOCATION不能當啓用safe_mode設置或激活了open_basedir在/home/xxx/public_html/xxx.php設定上線56
我怎麼會去通過SSH該固定?
所以,我不斷收到多個服務器上的這個惱人的錯誤(它的一個警告,所以我會忽略它,但我需要的功能)CURLOPT_FOLLOWLOCATION不能被激活
警告:curl_setopt()[function.curl -setopt]:CURLOPT_FOLLOWLOCATION不能當啓用safe_mode設置或激活了open_basedir在/home/xxx/public_html/xxx.php設定上線56
我怎麼會去通過SSH該固定?
在您的php.ini文件中設置safe_mode = Off
(通常位於服務器上的/ etc /目錄中)。如果已經關閉,那麼在php.ini文件中查找open_basedir
的東西,並相應地更改它。
基本上,後續位置選項已被禁用作爲安全措施,但PHP的內置安全功能通常比安全更惱人。實際上,safe_mode
is deprecated in PHP 5.3。
只要在php.ini文件中啓用了open_basedir或safe_mode,就不能使用CURLOPT_FOLLOWLOCATION配置。要更改這些設置,我只能給一般注意事項:
sudo nano php.ini
)。記得在之後重新啓動你的httpd!
試試這個,如果需要重定向和安全模式被激活,它遵循基於標題的鏈接(如果你抓雖然這不起作用,但是它將標題添加到返回中),這是針對您的特定問題的解決方法,當客戶安裝了我的腳本之一時,我遇到了同樣的問題,因此必須提出此問題。它也會將錯誤記錄到:curl.error.log
..有用的eh
<?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;
}
你「可能」不想添加檢查新的URL不是文件:// url。這可能會暴露「file:///myproject/database.php」等內容,默認情況下自7.19.4(請參閱CURLOPT_REDIR_PROTOCOLS),cURL不允許這些內容。較低版本的捲曲沒有這種限制,這就是爲什麼CURLOPT_FOLLOWLOCATION不允許在安全模式下使用。 –
未定義的變量:referer – 2013-11-12 11:05:57
@ 2astalavista謝謝修復 –
什麼是您的設置(安全模式和/或打開basedir啓用?),你想達到什麼? – aefxx