請教下如何才算比較好的隨機廣告!在不同網頁中,以及同頁面不同位置,都能隨機顯示不相同的廣告,不知道大家是如何做的了?----------------------------------------------我是把所有廣告代碼放到數據庫,每個頁面根據已顯示次數查詢,放到數組中。再在不同位置調用數組。結果網頁好像是因為這個原因被暫停了。(超了CPU跟RAM)!

解决方案 »

  1.   

    最好有缓存技术,用个memcache在内存中建立计数器记录各个广告的显示次数和内容来避免频繁的文件读写。
      

  2.   

    那只能再學了,PHP基礎都還有問題!
      

  3.   

    提供下SQL代码和PHP代码吧,一起分析一下问题
      

  4.   

    辛苦你了!
    $query = "SELECT * from ads order by show_n ASC LIMIT 0 , 4";  //這網頁有四個位置 
    mysql_query("SET NAMES 'UTF8'");
    $rs = mysql_query($query,$link) or die("Query failed"); 
    $rows = mysql_num_rows($rs);
            $ii =0; 
            $ads = array(); 
    while($line=mysql_fetch_array($rs,MYSQL_ASSOC)){
            $ii +=1;
            $ads[$ii] =$line["bodys"];
            $sql = "update ads set show_n=show_n+1 where id=".$line['id'];//將要顯示更新下顯示次數
    mysql_query($sql,$link) or die("query db false!!!"); 
    }
    mysql_free_result($rs);?>在四個廣告位置各放一個<? echo $ads[1]; ?>到<? echo $ads[4]; ?>這樣會對MEM跟CPU會有很大影響嗎?還是說應該在四個不同位置都查詢一次數據庫。還是應該用其它方法?
      

  5.   

    我不會PHP,網站是朋友給我的。但這個廣告又是我自己拼過來的。所以肯定有些問題。請大大幫忙指正下!
      

  6.   

    不用memcache的话,将数组写到php文件缓存吧。
      

  7.   

    你可以把所有广告都读进一个数组,serialize序列化保存到某个文件里。然后每次访问页面:
    1、打开文件并设置锁定(fopen,flock LOCK_EX);
    2、读出文件内容,反序列化(unserialize)为数组变量;
    3、根据需要显示的数量,循环执行:用array_shift取出并删除数组的第一个元素,作为将要显示的广告,并将该元素用array_push重新插入到数组末尾(就是把开头的元素挪到结尾,类似于循环使用的意思);
    4、序列化,保存到目标文件。
      

  8.   

    读写一次这种文件的性能影响很小。比更新每个广告的show_n效率高一些。
      

  9.   


    謝謝· 我找到一個serialize序列化缓存的例子,根據你的提示我去拼下代碼!在這里謝謝你的幫忙先