谷歌PageSpeed建议我指定一个缓存验证器,但我不知道如何

时间:2013-03-22 01:29:36

标签: google-maps-api-3 pdo

我在此页面上运行了Google的PageSpeed工具: http://classifieds.your-adrenaline-fix.com/detail.php?fatherID=10&ListingID=7&TypeID=42

结果表明我应该指定一个缓存验证器 - Last-Modified或ETag头。

我已经彻底阅读了这个: https://developers.google.com/speed/docs/best-practices/caching#LeverageProxyCaching

但我不知道该怎么做。

我知道我遇到的问题(通过Google的PageSpeed工具出现的问题)源自以下显示Google地图的代码,但此代码是有人在此帮助我的代码。 (尽管我还没有学到任何关于PDO的知识,也没有真正理解代码)

我希望有人可以查看下面提供的代码,让我知道所有看起来都是正确的并与我分享如何指定缓存验证程序以更好地根据Google的Page Speed建议页面。

任何帮助肯定会受到赞赏,我提前感谢你们。

Stuart K

编辑:此外,我在.htaccess中有以下代码:(以下地图代码)

<IfModule mod_expires.c>
# Enable expirations
ExpiresActive On 
# Default directive
ExpiresDefault "access plus 1 year"
# Favicon
ExpiresByType image/x-icon "access plus 1 year"
# Images
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
# CSS
ExpiresByType text/css "access 1 month"
# Javascript
ExpiresByType application/javascript "access plus 1 year"
</IfModule>









$TypeID = isset($_GET['TypeID']) ? $_GET['TypeID'] : ''; 
            $ListingID = isset($_GET['ListingID']) ? $_GET['ListingID'] : ''; 
            $allowed_tables = array('tt_42', 'tt_43');//Array of allowed tables to sanatise query
            //Define table name
            $table ="tt_".$TypeID;
            //Connect to database
            $dbh = new PDO("mysql:host=$host;dbname=$db", $username, $password);
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            try {
                //Check if table name is in allowed list
                if (in_array($table, $allowed_tables)) {
                    //Prepare query
                $query = "SELECT *  FROM `$table` WHERE `ID` = ? AND `ExpireDate` > NOW()";
                }//end if
                // Prepare statement
                $stmt = $dbh->prepare($query);
                // Assign parameter
                $stmt->bindParam(1,$ListingID);
                //Execute query
                $stmt->setFetchMode(PDO::FETCH_ASSOC);
                $stmt->execute();

                //New code
                $Address = $listing['Address'];
                $City = $listing['City'];
                $State = $listing['State/Province'];
                $Zip = $listing['Zip/Postal'];
                $Country = $listing['Country'];
                //End new code

                echo '<h2>Map of Surrounding Area With Navigational Aides</h2>';
                echo '<div class="CalloutBoxBlue">Hover over map and scroll, or use + and - in LH corner of map to zoom or expand viewing area. Alternatively, hold down mouse to manually move the map to a different geographical location, or drag the person icon to a specific location on the map for a street view.</div>';
                echo '<div id="GoogleMap">'; 
                //New code
                echo '<iframe scrolling="no" style="width:480px; height:300px; border:0px;" frameborder="0" src="googlemap.php?Address='.$Address.'&amp;City='.$City.'&amp;State='.$State.'&amp;Zip='.$Zip.'&amp;Country='.$Country.'"></iframe>'; 
                //End new code
                echo '</div>'; 
            }//End try


            catch(PDOException $e) {
                echo "I'm sorry I'm afraid you can't do that.". $e->getMessage() ;// Remove or modify after testing 
                file_put_contents('PDOErrors.txt',date('[Y-m-d H:i:s]').", mapSelect.php, ". $e->getMessage()."\r\n", FILE_APPEND);  
             }


            }

1 个答案:

答案 0 :(得分:0)

您可以使用Cache-Control标头指定缓存验证程序。确保在回显或打印任何内容之前进行设置。

header('Cache-Control: <amount of seconds e.g. 3600 or 86400, "no-cache" for none>');

我还对您的PDO代码进行了一些更改。我移动了if语句来检查表是否被允许并添加了一些代码来实际检索所选数据。

header('Cache-Control: 900');   // 15 minutes

$TypeID = isset($_GET['TypeID']) ? $_GET['TypeID'] : ''; 
$ListingID = isset($_GET['ListingID']) ? $_GET['ListingID'] : ''; 
$allowed_tables = array('tt_42', 'tt_43');//Array of allowed tables to sanitise query
// Define table name
$table = "tt_" . $TypeID;
if (in_array($table, $allowed_tables)) {
    try {
        // Connect to database
        $dbh = new PDO("mysql:host=$host;dbname=$db", $username, $password);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Prepare query
        $query = "SELECT * FROM $table WHERE ID=? AND ExpireDate>NOW()";
        // Prepare statement
        $stmt = $dbh->prepare($query);
        // Assign parameter
        $stmt->bindParam(1, $ListingID);
        // Execute query
        $stmt->execute();

        // Fetch all results
        $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

        if (!empty($data)) {
            $listing = reset($data);

            // New code
            $Address = $listing['Address'];
            $City = $listing['City'];
            $State = $listing['State/Province'];
            $Zip = $listing['Zip/Postal'];
            $Country = $listing['Country'];
            // End new code

            echo '<h2>Map of Surrounding Area With Navigational Aides</h2>';
            echo '<div class="CalloutBoxBlue">Hover over map and scroll, or use + and - in LH corner of map to zoom or expand viewing area. Alternatively, hold down mouse to manually move the map to a different geographical location, or drag the person icon to a specific location on the map for a street view.</div>';
            echo '<div id="GoogleMap">'; 
            // New code
            echo '<iframe scrolling="no" style="width: 480px; height: 300px; border: 0px;" frameborder="0" src="googlemap.php?Address=' . $Address . '&amp;City=' . $City . '&amp;State=' . $State . '&amp;Zip=' . $Zip . '&amp;Country=' . $Country . '"></iframe>'; 
            // End new code
            echo '</div>';
        } else {
            // Show "no addresses found" message
        }
    } catch(PDOException $e) {
        echo "I'm sorry I'm afraid you can't do that." . $e->getMessage();  // Remove or modify after testing 
        file_put_contents('PDOErrors.txt', date('[Y-m-d H:i:s]') . ", mapSelect.php, " . $e->getMessage(). "\r\n", FILE_APPEND);  
    }
}