Cita:
Basandome en las funciones encontradas en: http://www.edmondscommerce.co.uk/cur...-or-safe-mode/ hice lo siguiente para obtener las variables que ambas clases (Twitter y Bitly) requieren: $response, $headers, $errorNumber, $errorMessage.CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set
Código PHP:
Ver original
function sm_curl($options){ // Hay que seguir redireccionamientos? // Instanciamos cURL // Aqui entramos solo si hay que seguir redireccionamientos y // open_basedir o safe_mode estan activos // Eliminamos la opcion CURL para seguir redireccionamientos // Establecemos las opciones // Ejecutamos y seguimos redireccionamientos $response = curl_redir_exec($go); } else { // Ejecutar // Obtener errores } return $response; } // Seguir redireccionamientos con open_basedir o safe_mode = On function curl_redir_exec($ch) { static $curl_loops = 0; static $curl_max_loops = 20; if ($curl_loops++>= $curl_max_loops) { $curl_loops = 0; return array('response' => '', 'headers' => '', 'errorNumber' => '47', 'errorMessage' => 'Too many redirects'); } $http_code = $headers['http_code']; if ($http_code == 301 || $http_code == 302) { if (!$url) { //couldn't process the url to redirect to $curl_loops = 0; return array('response' => '', 'headers' => '', 'errorNumber' => 3, 'errorMessage' => 'The URL was not properly formatted (redirect).'); } if (!$url['scheme']) $url['scheme'] = $last_url['scheme']; if (!$url['host']) $url['host'] = $last_url['host']; if (!$url['path']) $url['path'] = $last_url['path']; $new_url = $url['scheme'] . '://' . $url['host'] . $url['path'] . ($url['query']?'?'.$url['query']:''); return curl_redir_exec($ch); } else { $curl_loops=0; 'response' => $data, 'headers' => $headers, ); } }
$options es una matriz donde se incluyen todas las opciones cURL a ejecutar, por ejemplo, en la funcion doCall() de la clase Bitly es:
Código PHP:
Ver original
// set options $options[CURLOPT_URL] = $url; $options[CURLOPT_PORT] = self::API_PORT; $options[CURLOPT_USERAGENT] = $this->getUserAgent(); $options[CURLOPT_FOLLOWLOCATION] = true; $options[CURLOPT_RETURNTRANSFER] = true; $options[CURLOPT_TIMEOUT] = (int) $this->getTimeOut();
La ejecucion original es:
Código PHP:
Ver original
// init // set options // execute // fetch errors // close
Y hay que reemplazarla por:
Código PHP:
Ver original
$data = sm_curl($options);
Tengo un archivo common.php donde guardo las rutinas de uso mas frecuente o que son requeridas por dos o mas scripts en mis sitios, aqui coloque las funciones sm_curl() y curl_redir_exec().
Tanto para Twitter, como para Bit.ly, uso las clases creadas por Tijs Verkoyen que pueden descargar en: http://classes.verkoyen.eu/