2012-03-23 103 views
0

編輯於7/16/2012我想使用wwwcopy腳本從我的PHP內容創建幾個靜態html頁面

我需要重新討論這個問題。一段時間以來,我一直在使用動態頁面和緩存PHP。我的大部分頁面都被緩存,但元信息不是。正如我在下面的帖子中所解釋的那樣,我需要減少/刪除去往本地MySQL數據庫的請求。由於即將到來的請求,我收到500個內部服務器錯誤。我一直在探索Jquery/Ajax將數據從數據庫中提取到一個xml頁面,並從中獲取站點請求的數據,這些數據正在工作,但我仍然遇到了將內容從正文移動到meta的問題Facebook和搜索引擎可以看到動態內容。這是我需要的......

我需要一個解決方案,通過查看 http://chennaichristianradio.com/PHP/web/songinfo.php?songID=並從0開始並計數到1500(http:// chennaichristianradio。 com/PHP/web/songinfo.php?songID = 0到http://chennaichristianradio.com/PHP/web/songinfo.php?songID=1500)。這對我很有用,但不是首選。

第二種方法是創建一個PHP緩存選項,緩存整個頁面,包括從PHP創建的元數據。

第三個選項(我的首選選項)是能夠從ajax/Jquery在主體中創建數據或從xml頁面本身創建元數據。

謝謝您重新審視此請求。請閱讀我今年早些時候的原始帖子。這裏是我的一些當前的代碼,我使用和實例鏈接.....

用於創建動態網頁當前PHP ...

<title>Chennai Christian Radio</title> 
    <meta property="og:title" content="<?php echo $song->title; ?> by <?php echo $song->artist; ?> - Found on Chennai Christian Radio"/> 
    <meta property="og:type" content="song"/> 
    <meta property="og:url" content="http://chennaichristianradio.com/PHP/web/songinfo.php?songID=<?php echo $song->ID; ?>"/> 
    <meta property="og:image" content="<?php echo $song->picture; ?>"/> 
    <meta property="og:site_name" content="Chennai Christian Radio"/> 
    <meta property="fb:admins" content="1013572426"/> 
<?php 

     $cachefile = "cache/".$reqfilename.$cache_folder.md5($_SERVER['REQUEST_URI']); 


     $cachetime = 11000 * 60; // 110000 minutes 


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

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

     include($cachefile); 


     echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." 
     -->n"; 


     exit; 

     } 

     ob_start(); // start the output buffer 


?> 
<div id="fbbutton"> 
<div id="fb-root"></div> 
<script>(function(d, s, id) { 
    var js, fjs = d.getElementsByTagName(s)[0]; 
    if (d.getElementById(id)) return; 
    js = d.createElement(s); js.id = id; 
    js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=170819122971839"; 
    fjs.parentNode.insertBefore(js, fjs); 
}(document, 'script', 'facebook-jssdk'));</script> 
<div class="fb-like" data-send="false" data-layout="box_count" data-width="50" data-show-faces="false"></div> 
</div> 

<div id="songinfo"> 

<!-- BEGIN:AlbumArt --> 
<?php if(SHOW_PICTURES && !empty($song->picture)) : ?> <img class="picture" id="picture" onload="showPicture(this, <?php echo SHOW_PICTURES; ?>)" src="<?php echo $song->picture; ?>" alt="" border=0 width="142" height="142" /></a><?php endif; ?> 


</div> 
<!-- Song Info --> 
<div id="wrapper"> 
<div id="title"><?php echo $song->title; ?></div> 
<div id="artist"><?php echo $song->artist; ?></div> 
<div id="album"><?php echo $song->album; ?></div> 
<div id="duration"><?php echo $song->durationDisplay; ?></div> 
<div id="year"><?php echo $song->albumyear; ?></div> 
</div> 
<div id="lyrics"><pre><?php if (!empty($song->lyrics)) : ?><dd class="broad"><pre><?php echo $song->lyrics; ?><?php endif; ?></pre></div> 
<?php 
     // open the cache file for writing 
     $fp = fopen($cachefile, 'w'); 


     // save the contents of output buffer to the file 
     fwrite($fp, ob_get_contents()); 

     // close the file 

     fclose($fp); 

     // Send the output to the browser 
     ob_end_flush(); 
?> 

這是我的新的腳本來創建XML .......

<?php 

    // Change to your database user name 
    $username="*********"; 


    //Change to your database password 
    $password="*********"; 


    // Change to your database name 
    $database="********"; 

    // Connect to the database 
    mysql_connect('*********',$username,$password); 

    // Handle an error 
    @mysql_select_db($database) or die("Unable to select database"); 

     // Build Sql that returns the data needed - change this as required.  
     $sql = "SELECT songlist.*, historylist.listeners as listeners, historylist.requestID as requestID, historylist.date_played as starttime FROM historylist,songlist WHERE (historylist.songID = songlist.ID) AND (songlist.songtype='S' OR songlist.songtype='C' OR songlist.songtype='N') ORDER BY historylist.date_played DESC LIMIT 1"; 


     // Store results in result object 
     $result = mysql_query($sql); 


     //store values in vars for calculation for array creation 
     $curPlay = mysql_query("SELECT * FROM historylist ORDER BY date_played DESC LIMIT 1"); 
     $curPlayRow = mysql_fetch_assoc($curPlay); 
     if (!$curPlay) { echo(mysql_error()); } 
     $dt_duration = mysql_result($result,$i,'duration'); 
     $title= mysql_result($result,$i,'title'); 
     $artist= mysql_result($result,$i,'artist'); 
     $album= mysql_result($result,$i,'album'); 
     $picture= rawurlencode(mysql_result($result,$i,'picture')); 
     $lyrics= mysql_result($result,$i,'lyrics'); 
     $ID= mysql_result($result,$i,'ID'); 
     $curtime = time(); 
     $timeleft = $starttime+round($dt_duration/1000)-$curtime; 
     $secsRemain = (round($dt_duration/1000)-($curtime-$starttime)); 

     //build array to return via getXMLHTTPRequest object - you can include more vars but remeber to handle them 
     //correcty in the useHttpResponse function  
     $Aj_array = $dt_duration . '|' . $secsRemain . '|' . $title . '|' . $artist .'|' . $album .'|' . $picture .'|' . $lyrics .'|' . $ID; 

     //we are using the text response object - which i think is easier for small data return 
     //just echo the array     - not so much AJAX rather AJA ?? 
     echo $Aj_array 

?> 

而且在我的HTML閱讀提取的內容腳本....

<script language="JavaScript"> 

    var http = getXMLHTTPRequest(); 
    var counter; 

     function getXMLHTTPRequest() { 
     try { 
     req = new XMLHttpRequest(); 
     } catch(err1) { 
     try { 
     req = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (err2) { 
      try { 
      req = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (err3) { 
      req = false; 
      } 
     } 
     } 
     return req; 
     } 



     function getServerText() { 
     var myurl = 'http://bangalorechristianradio.com/PHP/web/aj.php'; 
     myRand = parseInt(Math.random()*999999999999999); 
     var modurl = myurl+"?rand="+myRand; 
     http.open("GET", modurl, true); 
     http.onreadystatechange = useHttpResponse; 
     http.send(null); 
     } 

     function useHttpResponse() { 
       if (http.readyState == 4) { 
      if(http.status == 200) { 
      var aj_results = http.responseText.split("|"); 

      var aj_duration = aj_results[0]; 
      var aj_secsremaining = aj_results[1]; 
      var aj_title = aj_results[2]; 
      var aj_artist = aj_results[3]; 
      var aj_album = aj_results[4]; 
      var aj_picture = aj_results[5]; 
      var aj_lyrics = aj_results[6]; 
      var aj_ID = aj_results[7]; 

      // update title and artist divs 

      document.getElementById('title').innerHTML = aj_title; 
      document.getElementById('artist').innerHTML = aj_artist; 
      document.getElementById('album').innerHTML = aj_album; 
      document.getElementById('picture').innerHTML = "<img src=http://chennaichristianradio.com/images/album_art/" + aj_results[5] +" width='142' height='142'>" 
      document.getElementById('lyrics').innerHTML = aj_lyrics; 

      countDownInterval = aj_secsremaining - 0; 
      countDownTime = countDownInterval + 1; 
      countDown() 
      } 
     } else { 
     //document. getElementById('actual').innerHTML = ""; 
     } 
     } 




    function countDown() { 
     countDownTime--; 
     if (countDownTime == 0) { 
     countDownTime = countDownInterval; 
     getServerText() 
     } 
     else if (countDownTime < 0) 
     countDownTime = 30; 
     if (document.all) 
     document.all.countDownText.innerText = secsToMins(countDownTime); 
     else if (document.getElementById) 
     document.getElementById("countDownText").innerHTML = secsToMins(countDownTime); 
     stopCountDown(); 
     counter = setTimeout("countDown()", 1000); 
    } 

    function secsToMins(theValue) { 
     var theMin = Math.floor(theValue/60); 
     var theSec = (theValue % 60); 
     if (theSec < 10) 
     theSec = "0" + theSec; 
     return(theMin + ":" + theSec); 
    } 

    function stopCountDown() 
     { 
     clearTimeout(counter) 
     } 

</script> 

一些鏈接小號 動態創建的頁面使用PHP:http://chennaichristianradio.com/PHP/web/songinfo.php?songID=5351

XML頁面顯示,我需要在我的網頁中的數據:http://bangalorechristianradio.com/PHP/web/aj.php

頁已經使用JQuery和Ajax創建:http://bangalorechristianradio.com/PHP/web/player.html

謝謝大家對您的幫幫我!! -Bob Swaggerty

原帖下面

我想使用下面的腳本來創建數百個靜態的HTML頁面:

<?php 
function wwwcopy($link,$file) 
{ 
    $fp = @fopen($link,"r"); 
    while(!feof($fp)) 
    { 
     $cont.= fread($fp,1024); 
    } 
    fclose($fp); 

    $fp2 = @fopen($file,"w"); 
    fwrite($fp2,$cont); 
    fclose($fp2); 
} 

wwwcopy("http://www.domain.com/list.php?member=sample", "sample.html"); 

創建我的PHP頁面調用create.php,創建1文件。我如何使用這個腳本並創建1200頁?

我的全部目的是儘量減少對我的MySQL數據庫的請求,並使我的頁面更快。創建這些頁面後,我將使用另一個腳本來指向這些文件。

(2012年3月24日更新)

感謝您的回覆。這是我正在努力完成的。也許有更好的解決辦法......

看看我的網頁http://chennaichristianradio.com/PHP/web/songinfo.php?songID=5351

我的軟件是動態地從ID 5351(在我的數據庫中的歌曲) 我使用PHP去創造這個頁面抓住歌曲信息。爲了使這個過程更高效,我設置了PHP緩存。我現在這個緩存使用....

<?php 

    $cachefile = "cache/".$reqfilename.$cache_folder.md5($_SERVER['REQUEST_URI']); 


    $cachetime = 11000 * 60; // 110000 minutes 


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

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

    include($cachefile); 


    echo "<!-- Cached ".date('jS F Y H:i', filemtime($cachefile))." 
    -->n"; 


    exit; 

    } 

    ob_start(); // start the output buffer 

?>

的PHP緩存正在使用該完成的,但我的問題是,它只是緩存從這個代碼和下面的PHP信息。這是一個問題的原因,是因爲我在元信息中使用PHP和我的Open Graphic標籤一樣。 OG讓人們可以在Facebook上「喜歡」我的音樂。這是我的OG標籤的樣子。

<title>Chennai Christian Radio</title> 
<meta property="og:title" content="<?php echo $song->title; ?> by <?php echo $song->artist; ?> - Found on Chennai Christian Radio"/> 
<meta property="og:type" content="song"/> 
<meta property="og:url" content="http://chennaichristianradio.com/PHP/web/songinfo.php?songID=<?php echo $song->ID; ?>"/> 
<meta property="og:image" content="<?php echo $song->picture; ?>"/> 
<meta property="og:site_name" content="Chennai Christian Radio"/> 
<meta property="fb:admins" content="1013572426"/> 
<meta property="og:description" 
     content="Chennai Christian Radio is your last stop for today's best Christian Music. http://chennaichristianradio.com"/> 

那麼......緩存我的動態頁面和包含元信息的解決方案是什麼?這是最好的選擇,但使用我當前的代碼,它仍然查詢我的MYSQL服務器的元信息和歌曲信息。我想通過爲此創建靜態頁面並告訴我的軟件指向這些頁面而不是查詢我的數據庫會更加高效,並且幫助將我的PHP流量減少回到我的服務器。希望能夠澄清我的需求,我感謝大家的迴應和幫助。

回答

0

我不確定你想要達到什麼目的,但要做1200次,只需使用for循環並更改文件名和URL。

for ($i = 1; $i <= 1200; $i++) 
{ 
    wwwcopy("url", "file"); 
} 
+0

看到我的更新,瞭解我想達到什麼。謝謝。 – 2012-03-24 08:04:56

0

我認爲你必須去緩存選項。如果您使用任何框架工作,則會啓用緩存的默認設置。這會真的提高你的速度。

相關問題