0

私たちはいくつかの高負荷サイトにサービスを提供しており、これまでのところ、いくつかの基本的なローカル バナー ローテーションをサポートするリモート バナーをキャッシュするためのこのコードを用意しました。このコードの可能な改善点や提案についてあなたから聞きたいことは、すべての人にとってかなり簡単に理解できるはずです。ここにあります...

        $cachetime = 6 * 60 * 60; // 6 hours
        $bannercache = $_SERVER['DOCUMENT_ROOT']."/banner-".$bpos.".txt";

            // Serve from the cache if it is younger than $cachetime

            if (file_exists($bannercache) && (time() - $cachetime
             < filemtime($bannercache)))
            {

                    // if it's ok don't update from remote

            } else {

                    // if cache is old, update from remote


                    $bannercachecontent = @file_get_contents('ADSERVER.com/showad.php?category='.$adcat.'&dimensions='.$dimensions);

                    if ($bannercachecontent === FALSE) {

                        // on error, just update local time, so that it's not pulled again in case of remote mysql overload

                        $fb = @fopen($bannercache, 'a+');
                        fwrite($fb, "\n<!-- Changed date on ".date('jS F Y H:i', filemtime($cachefile))."-->\n");
                        fclose($fb);

                    } else {

                        // if it's ok, save new local file

                        $fb = @fopen($bannercache, 'w');
                        fwrite($fb, $bannercachecontent);
                        fwrite($fb, "\n<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))."-->\n");
                        fclose($fb);
                    }



            }



        $fhm = file_get_contents($bannercache);



        $fhmpos = strpos($fhm, '-----#####-----'); // check if it needs to be exploded for rotation
        if ($fhmpos === false) {

            echo $fhm;

        } else {

            $fhmpicks = explode("-----#####-----", $fhm);


        foreach ($fhmpicks as $fhmkey => $fhmvalue)
        {
            if (trim($fhmpicks[$fhmkey]) == '')
            {
                unset($fhmpicks[$fhmkey]);
            }
        }


            $fhmpick = array_rand($fhmpicks,1);

            echo $fhmpicks[$fhmpick]; // show only one banner

        }
4

1 に答える 1

0

クライアントにバナーを更新させないでください。これを行う必要があるユーザーは常に 1 人いますが、それは必要ありません。

代わりに、クライアントが常にローカル イメージをロードし、適切なイメージをフェッチするバックグラウンド プロセス(cron、今すぐイメージを取得する場合は手動でオーバーライド) を実行させます。

コードはかなり単純です。

あなたのクライアントは:$yourImage= $_SERVER['DOCUMENT_ROOT']."/banner-".$bpos.".txt";

そしてあなたの更新スクリプトはちょうどcURLいいイメージになります。

于 2012-08-20T11:15:49.783 に答える