2011-01-09 3 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>'; 

Это иногда показывает страницы это показано ранее. Я хочу, чтобы он помнил, какие сайты он отобразил, и не показывайте его снова, пока пользователь не начнет с самого начала. Спасибо, спасибо за вашу помощь.

+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>'; 

там может быть потенциальными ошибками, если формат $_SERVER['PHP_SELF'] и это вашая linklist отличается, вы можете оценить это с некоторым быстрым var_dumps. Насколько я знаю, Wordpress автоматически запускает сеанс, это должно объяснить вашу ошибку. Этот скрипт предполагает, что сеанс уже запущен.

+0

К сожалению, я очень новичок. можете ли вы помочь реализовать это? – Truthworthy

+0

$ arrayOFRandomLinks должен содержать все те ссылки, которые вы хотите перебирать, вы также можете использовать '$ arrayOFRandomLinks = include 'somefile.php'' с 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

Большое спасибо за ответ ... К сожалению, это показывает ошибки, как эта Внимание: session_start() [function.session-начало]: не удается отправить ограничитель сессии кэш - заголовки уже отправлены Фатальная ошибка: Максимальное время выполнения 30 секунд превысила есть другим способом мы можем это сделать или написать этот код? благодарю вас за вашу помощь. – Truthworthy

+0

session_start(); написать в начале всех кодов –

+0

nope все еще испытывает такую ​​же проблему. удалить session_start(); так как я добавляю этот код в плагин wordpress, но все же у меня есть другая ошибка. – Truthworthy

Смежные вопросы