2012-06-23 2 views
3

Oron, 파일 포스트, 보증금 등의 파일 공유 URL을 나열한 프로젝트에서 작업하고 있습니다.이 프로젝트는 저작권이있는 자료를 식별 된 콘텐츠 소유자 및 저작권 보유자에게 공유하는 것으로보고합니다. 회로망.링크가 작동하는지 확인하고 깨지지 않았 음을 시각적으로 확인하지 않은 경우

php에 내장 된 일부 필터를 사용하여 MySQL 데이터베이스에서 채워지는 테이블에 현재 서비스를 향상시키기 위해, 나는 작동을 멈춘 링크를 식별 할 수 있기를 원합니다.

내 생각에 데이터가 MySQL 데이터베이스에서 검색되면 다운로드 URL 항목 (파일 또는 파일 호스트 페이지의 URL)이 검사되어 사용자가 허용하는 실제 파일 공유 페이지에 연결되는지 확인합니다 다운로드 작업을 시작하고 파일을 다운로드 할 수있는 기능을 제공하고 링크 텍스트 또는 셀 색상이 녹색으로 바뀌면 파일 사이트에 파일이 없거나 유사한 링크 텍스트 또는 셀 배경색이 표시되면 빨간색으로 변합니다.

현재 활성 또는 비활성 링크에 대한 빠르고 쉬운 시각적 표현은 없습니다.

404 오류가 수신되었지만 이러한 사이트가 404가 아니거나 리디렉션되지 않아도 작동하지 않는다는 사실을 기반으로 URL에 대한 간단한 검증이 있습니다. 동적으로 생성 된 페이지를 변경하여 파일을 말합니다 사용할 수 없거나 파일이 제거되었습니다.

또한 세 번째 부분 인 파일 공유 링크 검사 서비스를 사용하는 링크 검사기 스크립트를 포함 시켰습니다.하지만 수동 검사와 데이터베이스 수동 업데이트가 필요했습니다.

페이지에서 특정 필드 나 단어를 찾을 수 있는지도 확인했는데 특정 사이트 범위와이 사이트에서 사용 된 광범위한 용어가 정확하고 어렵다는 것이 입증되었습니다. 모든 링크에 구현하십시오.

활성 상태를 기준으로 URL을 필터링 할 수 있다면 도움이됩니다. 색상 변경이 링크 클래스 또는 셀 클래스 스타일에 의해 관리 되었다면 클래스에 기반하여 열을 필터링 할 수 있다고 생각합니다. 예 : link-dead 또는 link-active. 나는 이것을 할 수 있다고 생각합니다. 클래스에 기반한 필터링에 대한 마지막 비트가 꼭 필요한 것은 아닙니다.

도움을 주시면 감사하겠습니다.

답변

1

확인하려는 사이트가 다른 사람에 의해 만들어지기 때문에 링크가 손상되었거나 많은 수의 사이트가 아닌 경우에는 한 줄짜리자가 발견 할 가능성이 없습니다.

각 사이트에 대해 링크가 끊어진 경우이를 감지하는 간단한 함수를 만드는 것이 좋습니다. 링크를 확인하려면 도메인 이름을 기반으로 외부 사이트의 HTML에서 실행할 기능을 결정해야합니다.

당신은 파일 링크에서 도메인/호스트 추출 parse_url()을 사용할 수 있습니다 : 당신은 연관 배열에서 함수 이름을 저장할 수

// Get your url from the database. Here I'll just set it: 
$file_url_from_database = 'http://example.com/link/to/file?var=1&hello=world#file' 

$parsed_link = parse_url($file_url_from_database); 
$domain = $parsed_link['host']; // $domain now equals 'example.com' 

을 그런 식으로 그들에게 전화 :

function check_domain_com(){ ... } 
function check_example_com(){ ... } 

$link_checkers = array(); 
$link_checkers['domain.com'] = 'check_domain_com'; 
$link_checkers['example.com'] = 'check_example_com'; 

또는 함수를 배열에 저장하십시오 (PHP> = 5.3).

$link_checkers = array(); 
$link_checkers['domain.com'] = function(){ ... }; 
$link_checkers['example.com'] = function(){ ... }; 

하고 또는 당신은 단지 문

if($domain == 'domain.com') 
    check_domain_com(); 
else if($domain == 'example.com') 
    check_example_com(); // this function is called 

함수는 부울 반환 할 수있는 경우의 무리 사용할 수

if(isset($link_checkers[$domain])) 
    // call the function stored under the index 'example.com' 
    call_user_func($link_checkers[$domain]); 
else 
    throw(new Exception("I don't know how to check the domain $domain")); 

이러한 전화 (참 또는 거짓을 0 또는 1) (예를 들어 끊어진 링크에 여분의 CSS 클래스를 추가하는 경우) 필요할 경우 다른 함수를 사용하거나 호출 할 수 있습니다.

여러 사이트에서 사진을위한 메타 데이터를 가져오고 있지만 최근에 비슷한 작업을했습니다. 각 사이트에 대해 실행할 수있는 몇 가지 기능이 있었기 때문에 추상 클래스를 사용했습니다.

부수적으로 데이터베이스에 마지막으로 확인한 날짜를 저장하는 것이 좋으며 검사율은으로 24 시간 또는 48 시간 (또는 필요에 따라 더 멀리 떨어져있는 것)으로 제한하십시오.


편집 구현을 약간 명확히 : 다른 웹 사이트에 대한 HTTP 요청을하는 것은 잠재적으로 매우 느립니다으로

, 당신은 페이지가로드의 독립적 업데이트 링크 상태를 확인하는 것이 좋습니다.

  • 스크립트는 12 시간마다 실행되고 24 시간 전에 마지막으로 검사 된 데이터베이스의 모든 링크를 검사 할 수 있습니다. '이전'링크 각각에 대해 데이터베이스의 activelast_checked 열을 적절하게 업데이트합니다.
  • 누군가가 페이지를 요청하면 스크립트는 매번 확인하도록 원격 페이지를 다운로드하는 대신 데이터베이스의 active 열에서 읽습니다.
  • (추가 생각) 새 링크가 제출되면 스크립트에서 즉시 확인되거나 가능한 빨리 서버에서 확인하도록 대기열에 추가됩니다.

사람들이 쉽게 링크를 클릭하여 현재 상태를 확인할 수 있기 때문에 사람들이 페이지를 확인하기 위해 단추를 클릭 할 수 있도록하는 것이 바람직합니다 (생각과 달리).

잠재적으로 리소스가 많은 update-all 스크립트는 이 아니어야하며 웹을 통해이 실행 가능 (액세스 가능)해야합니다.

+0

응답 해 주셔서 감사합니다. Stecman. MySQL의 URL을 구문 분석 URL 함수 ('')로 호출합니까? 따라서 상태 열이 0인지 1인지에 따라 비활성 상태 인 경우 0, 활성 상태 인 경우 1과 같은 값을 반환 할 수 있습니다. 내가 어떻게 그럴 수 있니? 이것은 각 쿼리에 대해 페이지에서 자동으로 실행됩니까 아니면 버튼 클릭 등의 사용자 입력에서 실행해야합니까? 다시 한 번 감사드립니다 :) – Ben

+0

@Ben 나는이 질문에 답하기 위해 내 대답을 업데이트했습니다. 내 대답 – Stecman

+0

에 대한 다른 질문이 있다면 알려주십시오. 감사합니다 :) 완전히 작동시킬 시간이 없었지만 문제가 해결 될 것처럼 보입니다. 다시 한번 감사드립니다. – Ben