2016-07-12 4 views
0

Ich benutze PHP und Curl um Redirect URL, ich habe die Ausgabe, aber es zeigt mir einen Fehler 302 nicht gefunden bei der letzten Umleitung (Ich muss die URL umleiten Hier zweimal), ist mein pHP-Code,Wie bekomme ich die letzte Umleitung URL in PHP mit curl

<?php 

    $url = 'http://www.example.com/kdjf/ksdjfk/file'; 
    function getred($url){ 
     $ch = curl_init($url); 
     curl_exec($ch); 
     if (!curl_errno($ch)) { 
      $info = curl_getinfo($ch); 
      return $info['redirect_url']; 
     } 
     curl_close($ch); 
    } 
    $dds=getred($url); 
    echo getred($dds); 
?> 

$ dds gibt mir nächste Umleitung nach example.com weitergegeben und dann habe ich wieder die Umleitung Funktion verwenden, und ich habe eine Fehlermeldung anzeigt,

<html> 
    <head> 
     <title>302 Found</title> 
    </head> 
    <body bgcolor="white"> 
     <center><h1>302 Found</h1></center> 
     <hr><center>nginx</center> 
    </body> 
</html> 
http://www.example.org/skdfjk/new_file.html 

Wie bekomme ich nur http://www.example.org/skdfjk/new_file.html ohne Fehler. oder HTML-Tags.

+1

Versuchen Sie, hier zu suchen: http://stackoverflow.com/questions/15025875/what-ist-the-best-way-in-php-to-read-last-lines-from-a- Datei – Yaron

+0

Ich kann die letzte Zeile ist es einfach, aber ich will es ohne einen Fehler. –

+0

curl folgt entweder der gesamten Redirect-Kette oder folgt ihr nicht. Wenn Sie alle Zwischenumleitungen ankreuzen, müssen Sie dies in einer Schleife tun. 'URL holen, Redirect extrahieren, neue URL holen, eine andere Weiterleitung extrahieren, etc ...' –

Antwort

0

Ich habe zwei Funktionen verwendet, um diese Sache zu tun, ihre Arbeit für mich.

function getRedirectUrlss($url){ 
     $redirect_url = null; 

     $url_parts = @parse_url($url); 
     if (!$url_parts) return false; 
     if (!isset($url_parts['host'])) return false; //can't process relative URLs 
      if (!isset($url_parts['path'])) $url_parts['path'] = '/'; 

     $sock = fsockopen($url_parts['host'], (isset($url_parts['port']) ? (int)$url_parts['port'] : 80), $errno, $errstr, 30); 
     if (!$sock) return false; 

     $request = "HEAD " . $url_parts['path'] . (isset($url_parts['query']) ? '?'.$url_parts['query'] : '') . " HTTP/1.1\r\n"; 
     $request .= 'Host: ' . $url_parts['host'] . "\r\n"; 
     $request .= "Connection: Close\r\n\r\n"; 
     fwrite($sock, $request); 
     $response = ''; 
     while(!feof($sock)) $response .= fread($sock, 8192); 
     fclose($sock); 

     if (preg_match('/^Location: (.+?)$/m', $response, $matches)){ 
      if (substr($matches[1], 0, 1) == "/") 
        return $url_parts['scheme'] . "://" . $url_parts['host'] . trim($matches[1]); 
      else 
        return trim($matches[1]); 

     } else { 
       return false; 
     } 

       } 

function getred($url){ 
$ch = curl_init($url); 
curl_exec($ch); 
if (!curl_errno($ch)) { 
$info = curl_getinfo($ch); 
return $info['redirect_url']; 
} 
curl_close($ch); 
} 
$dds=getred($url); 
$urls= getRedirectUrlss($dds); 
echo $urls; 
0

Verwenden Sie ob_clean(), ob_end_clean() und ob_get_clean(). Funktion vor echo Ihre Ausgabe