2013-06-08 3 views
0

적절한 URL과 빠른 알고리즘 점점 : 등 https://example.org 대신 빠른 알고리즘을 무엇PHP, 내가 적절한 URL을 취득하기위한 기능이

function startsWith($haystack, $needle) { 
    return !strncmp($haystack, $needle, strlen($needle)); 
} 

function properUrl($url) { 
    $urls = array(); 
    if (startsWith($url, "https://") || startsWith($url, "http://")) { 
     $urls[] = $url; 
    } else if (startsWith($url, "www.")) { 
     $url = substr($url, 4); 
     $urls[] = "http://$url"; 
     $urls[] = "http://www.$url"; 
     $urls[] = "https://$url"; 
     $urls[] = "https://www.$url"; 
    } else { 
     $urls[] = "http://$url"; 
     $urls[] = "http://www.$url"; 
     $urls[] = "https://$url"; 
     $urls[] = "https://www.$url"; 
    } 
    foreach ($urls as $u) {   
     if (@file_get_contents($u)) { 
      $url = $u; 
      break; 
     } 
    } 
    return $url; 
} 

http://example.com에 example.com을 www.example.org을 file_get_contents 중. 나는 적당한 URL을 얻고 싶다. 전체 페이지를 읽지는 마라. 감사.

+2

기술적으로 'http : // www.example.org /'와 'http : // example.org /'는 전혀 다른 두 개의 서로 관련이없는 URL이므로 두 가지 중 어느 것이 맞는지 추측 할 수 없습니다. * 두 * 모두 정확합니까? – Jon

답변

0

사용 PHP의 parse_url()http://php.net/manual/en/function.parse-url.php

예 :

<?php 
$url = '//www.example.com/path?googleguy=googley'; 

// Prior to 5.4.7 this would show the path as "//www.example.com/path" 
var_dump(parse_url($url)); 
?> 

당신에게 줄 것이다 :

array(3) { 
    ["host"]=> 
    string(15) "www.example.com" 
    ["path"]=> 
    string(5) "/path" 
    ["query"]=> 
    string(17) "googleguy=googley" 
} 

동안 :

<?php 
$url = 'http://username:[email protected]/path?arg=value#anchor'; 

print_r(parse_url($url)); 

echo parse_url($url, PHP_URL_PATH); 
?> 

당신을 줄 것이다 :

Array 
(
    [scheme] => http 
    [host] => hostname 
    [user] => username 
    [pass] => password 
    [path] => /path 
    [query] => arg=value 
    [fragment] => anchor 
) 

당신이 당신이 필요로하는 값을 배열의 인덱스를 확인하고 거기에서 당신의 URL의 나머지 부분을 구축하는 것은 매우 쉽게 볼 수 있듯이. 많은 문자를 저장합니다.

URL이 있는지 확인하려면 전체 파일을 가져 오는 대신 (느리게) 헤더를 확인해야합니다. PHP의 get_headers()은 다음과 같이 처리합니다.

$file = 'http://www.domain.com/somefile.jpg'; 
$file_headers = @get_headers($file); 
if($file_headers[0] == 'HTTP/1.1 404 Not Found') { 
    $exists = false; 
} else { 
    $exists = true; 
} 

행운을 빈다!

+0

고맙습니다. – user2301515

+1

문제는 없지만 왼쪽에있는 체크 표시를 눌러 답을 수락하는 것을 잊지 마십시오. –

관련 문제