2011-11-12 69 views
0

此數據庫鏈接是否完全由數據庫填充?或者,它是否包含PHP的物理文件?只是,這個網頁是如何被調用的?
http://www.facebook.com/profile.php?id=49300915&sk=photos
他們可能做這樣的事情:查詢字符串,從數據庫或文件填充頁面

if(isset($_GET['id'], $_GET['sk'])) { 
    mysql_query("SELECT info, photos FROM users WHERE id = '$id'"); 
    } 

我想請問一下,他們怎麼有這個網頁?它是否像Drupal /任何CMS,PHP和頁面存儲在數據庫中,還是服務器上的物理文件?如果是後者,獲取文件的最佳方式是什麼(不區分大小寫的URL)?

+0

你確實想知道的Facebook是如何工作的,或者你只是想建立類似的東西? Facebook收到瘋狂的流量,因此該網站並非像世界上任何其他網站一樣建造。即使URL中有「.php」,如果該頁面甚至不執行任何PHP代碼,我也不會感到驚訝。 –

+1

實例,與Facebook無關。它是關於$ _GET ['variables']/querystrings並基於查詢字符串填充頁面。頁面如何被調用?這是一個超級簡單的問題。我可能會讓它過於複雜。 – Graham

+0

這不是一個簡單的問題,而且有很多完全不同的答案。擁有一個好的系統是很重要的,否則你的代碼往往會變成bug。請記住,「profile.php」會做很多不同的頁面,而不僅僅是一個頁面,你需要一種方法來分離所有不同頁面的代碼。我已經回答了大約我們如何在我工作的網絡編程業務上做的事情。 –

回答

1

我會用一個方法讀取'sk'並運行另一種方法,具體取決於它的值。

一種方法是'照片',它會讀取'id'並從數據庫中獲取照片。然後,它會運行另一種方法displayPage,該方法將顯示來自該數據的頁面。

displayPage方法需要一個「模板」文件名和一個變量數組來提供給模板。它設置smarty object,提供變量,並指示它顯示模板。

在模板內部,我會在網站的每個頁面中包含全局標題的另一個模板,然後我將html頁面內容,使用smarty插入動態值,然後包含全局頁腳。

請注意,我已經簡化了這個系統。像這樣的真實頁面需要我花一個星期的時間來編寫所有的代碼,因爲一個大網站只是爲了顯示一個簡單的頁面而做了很多事情(例如:找出登錄的用戶是否真的有權訪問該頁面.. 。我無法訪問你給出的例子)。

<?php 

// profile.php 

class ProfileController 
{ 
    public function run() 
    { 
    if ($_GET['sk'] == 'photos') 
     return $this->photosPage(); 
    } 

    protected function photosPage() 
    { 
    $id = (int)$_GET['id']; 
    $result = mysql_query("select * from photo where id = $id"); 
    $photo = mysql_fetch_object($photo); 

    $this->displayPage('view-photo.tpl', array('photo' => $photo); 
    } 

    protected function displayPage($templateFile, $templateVariables) 
    { 
    $smarty = new Smarty(); 

    foreach ($templateVariables as $variableName => $variableValue) { 
     $smarty->assign($variableName, $variableValue); 
    } 

    $smarty->display($templateFile); 
    } 
} 

$conntroller = new ProfileController(); 
$controller->run(); 

而智者代碼:

<!-- view-photo.tpl --> 
{include file='head.tpl'} 

<h1>View Photo {$photo->name|escape}</h1> 

<img src="{$photo->src|escape}" width="{$photo->width|escape} height="{$photo->height|escape}> 

{include file='foot.tpl'}