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

それは、時にはそれが以前に示されたページを表示します。私は、それが表示されているサイトを覚えておいて、最初からユーザーが始まるまで、再び表示しないようにします。ありがとうございました。あなたのLINKLISTの$_SERVER['PHP_SELF']のフォーマットと、これが異なる場合

+0

コードを表示するのを忘れた場合。 –

+0

私はそこにコードを埋め込むことができませんでしたが、このように見えます。 $ links = file( 'myfile.txt'); $ rand_link = $ links [mt_rand(0、count($ links) - 1)]; エコー '

'; – 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は、反復したいすべてのリンクを保持する必要があります。また、 '$ arrayOFRandomLinks = include 'somefile.php'' somefile.phpを' <?php return array(' link1.php '、' link2 .fp '、...); ' randを動作させるためのコードを追加しました。それは魔法全体でなければなりません。 –

+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()を削除しました。私はこのコードをWordPressのプラグインに追加していますが、それでも私は他のエラーがあります。 – Truthworthy