Intereting Posts

file_get_contents () и Curl

Я использую функцию file_get_contents () php в моем коде laravel 4.2, чтобы получить фотографию профиля после входа в систему через facebook.

он работал правильно, когда я пользуюсь этим

$arrContextOptions=array( "ssl"=>array( "verify_peer"=> false, "verify_peer_name"=> false, ), ); $content = file_get_contents($myurl, false, stream_context_create($arrContextOptions)); 

но он делает дыру безопасности в системе, как упоминалось ранее, в другом вопросе по той же проблеме, если я не использую этот метод дыры в безопасности, на моем лице появляется ошибка, которую я не могу обработать

ErrorException (E_WARNING) HELP file_get_contents (): операция SSL завершилась с кодом 1. OpenSSL Сообщения об ошибках: ошибка: 14090086: процедуры SSL: SSL3_GET_SERVER_CERTIFICATE: проверка сертификата не удалась "

затем я попробовал метод Curl

 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$myURL); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0); $content = curl_exec($ch); curl_close($ch); file_put_contents($path, $content); 

он не сделал никаких ошибок, и он не сработал ни «фото не вернулся»! так как я могу получить фотографию профиля в безопасном чистом виде и сохранить его с помощью php (laravel 4.2)?! Я тестирую его на своем локальном хосте, используя XAmpp

рабочий код:

  $user_id = PUT_USER_ID_HERE; $url = 'http://graph.facebook.com/' . $user_id . '/picture?type=large'; $finalUrl = get_final_url($url); $path = 'img/pic_facebook.jpg'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$finalUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $content = curl_exec($ch); curl_close($ch); file_put_contents($path, $content); function get_final_url( $url, $timeout = 5 ) { $url = str_replace( "&", "&", urldecode(trim($url)) ); $cookie = tempnam ("/tmp", "CURLCOOKIE"); $ch = curl_init(); curl_setopt( $ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1" ); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookie ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt( $ch, CURLOPT_ENCODING, "" ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_AUTOREFERER, true ); curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout ); curl_setopt( $ch, CURLOPT_TIMEOUT, $timeout ); curl_setopt( $ch, CURLOPT_MAXREDIRS, 10 ); $content = curl_exec( $ch ); $response = curl_getinfo( $ch ); curl_close ( $ch ); if ($response['http_code'] == 301 || $response['http_code'] == 302) { ini_set("user_agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1"); $headers = get_headers($response['url']); $location = ""; foreach( $headers as $value ) { if ( substr( strtolower($value), 0, 9 ) == "location:" ) return get_final_url( trim( substr( $value, 9, strlen($value) ) ) ); } } if ( preg_match("/window\.location\.replace\('(.*)'\)/i", $content, $value) || preg_match("/window\.location\=\"(.*)\"/i", $content, $value) ) { return get_final_url ( $value[1] ); } else { return $response['url']; } } 

функция, взятая отсюда: PHP Curl после перенаправления