2011-01-09 4 views
0

내가 설정에 임의의 링크를로드하는 코드를하려하지만 한 가지 문제가 있습니다랜덤 링크 PHP

$links = file('myfile.txt'); 
$rand_link = $links[ mt_rand(0, count($links) - 1) ]; 
echo '<div class="link"><a href="' . $rand_link . '"><img src="button.png" border="0"></a></div>'; 

그것은 때로는 이전에 표시 한 페이지를 보여줍니다. 사용자가 처음 시작할 때까지 표시되는 사이트를 기억하고 다시 표시하지 않기를 원합니다. 감사합니다. 당신의 linklist의 $_SERVER['PHP_SELF']의 형식이 다를 경우

+0

코드를 표시하는 것을 잊었습니다. –

+0

코드를 임베드 할 수 없지만 이렇게 보입니다. $ links = file ('myfile.txt'); $ rand_link = $ links [mt_rand (0, count ($ links) - 1)]]; echo '

'; – Truthworthy

답변

2

마지막으로 역사에 여러 사이트와 향상된 버전이

// Predefinitions 
$links = file('myfile.txt'); 
$currentPage = $_SERVER['PHP_SELF']; 

// make sure links are pure and no whitespaces are left 
foreach ($links as &$link) 
{ 
    $link = trim($link); 
} 

// prepare for history 
if (! array_key_exists('visited_links', $_SESSION)) 
{ 
    $_SESSION['visited_links'] = array(); 
} 
// add current site to visited links if it wasnt visited earlier 
if (! in_array($currentPage, $_SESSION['visited_links'])) 
{ 
    $_SESSION['visited_links'][] = $currentPage; 
} 

// get all those links which weren't visited yet kinda $links = $allLinks - $visitedLinks 
$potentialLinks = array_diff($links, $_SESSION['visited_links']); 

$randomLinkId = mt_rand(0, count($potentialLinks)-1); 
$randomLinkIds = array_keys($potentialLinks); 
$randomLink = $potentialLinks[$randomLinkIds[$randomLinkId]]; 


echo '<div class="link"><a href="'.$randomLink.'"><img src="button.png" border="0"></a></div>'; 

잠재적 인 오류가있을 수 있습니다, 당신은 몇 가지 빠른 var_dumps 이것을 평가할 수 있습니다. Wordpress가 자동으로 세션을 시작한다는 것을 알고있는 한, 이것은 오류 메시지를 설명해야합니다. 이 스크립트는 세션이 이미 시작되었다고 가정합니다.

+0

불행히도 저는 아주 초보자입니다. 당신이 이것을 구현할 수 있습니까? – Truthworthy

+0

$ arrayOFRandomLinks는 반복하고자하는 모든 링크를 보유하고 있어야합니다. somefile.php를 사용하여'$ arrayOFRandomLinks = include 'somefile.php' '을 수행 할 수도 있습니다. 단순히'

+0

방금 ​​한 세트가 아닌 한 세트의 사이트를 보여주고 싶다는 것을 이해했습니다. 이 접근 방식을 사용하려면 세션을 사용해야하며,이 방법도 구현할 것입니다. –

0

이 코드를 사용해보십시오. 오류 일 수 있습니다. 서버에서 테스트하지 않았습니다. 세션을 사용하여 이미 본 페이지를 보존합니다.

$links = file('myfile.txt'); 
$show_links = array(); 

session_start(); 

if($_SESSION['show_links']) 
foreach($_SESSION['show_links'] as $key=>$value){ 
    $show_links[$key] = $value; 
} 

$random_link_number = mt_rand(0, count($links) - 1); 

if(count($show_links) != count($links)){ 
while( !in_array($random_link_number, $show_links) ){ 
    $random_link_number = mt_rand(0, count($links) - 1); 
} 
} 
else{ 
    unset($show_links); 
} 

$show_links[] = $random_link_number; 
$_SESSION['show_links'] = $show_links; 

$rand_link = $links[ $random_link_number ]; 
+0

답장을 보내 주셔서 감사합니다. 30 초 최대 실행 시간이 초과 가 : - :으로 session_start() [function.session 시작은] : 헤더가 이미 전송 치명적인 오류 세션 캐시 리미터를 보낼 수 없습니다 ... 불행히도이 경고와 같은 오류를 표시 우리가 이것을 성취하거나이 코드를 작성할 수있는 또 다른 방법은? 덕분에 도움을 주셔서 감사합니다. – Truthworthy

+0

session_start(); 모든 코드의 처음에 쓰십시오. –

+0

은 여전히 ​​동일한 문제를 겪고 있지 않습니다. session_start()를 제거했습니다. 왜냐하면 나는이 코드를 플러그인에 추가하고 있기 때문에 다른 오류가있다. – Truthworthy