2010-12-12 90 views
10
http://static.ak.fbcdn.net/rsrc.php/117600/css/base.css 

http://static.ak.fbcdn.net/rsrc.php/z4HBM/hash/3krgnmig.swf 

http://b.static.ak.fbcdn.net/rsrc.php/z23ZQ/hash/3ls2fki5.xml 

http://static.ak.fbcdn.net/rsrc.php/z7O0P/hash/4hw14aet.png 

是什麼rsrc.php真的呢?我知道rsrc代表資源,rsrc.php/z [random]/hash或css/file.extenstion從somehwere加載文件。Facebook的世界裏有什麼是rsrc.php?

假設/哈希/或/ css /是一個文件夾,它保留了像.xml .png .swf這樣的文件,但是什麼是z [random]的東西,他們爲什麼要從php加載文件?是否爲文件的版本控制或什麼?如果是這樣的話(以一種更簡單的方式)?

+0

我的猜測是CDN目的 – ajreal 2010-12-12 13:44:23

+0

但是當我改變來自HTTP鏈接://static.ak.fbcdn.net/rsrc.php/z7O0P/hash/4hw14aet.png to http://static.ak.fbcdn.net/rsrc.php/z23ZQ/hash/4hw14aet.png它不工作和返回/ * bcs * /如果它的一個cdn thingy所有文件都應在所有服務器上可用 – kornesh 2010-12-12 13:49:19

回答

7

很簡單,這些文件存儲在數據庫中。在SELF(腳本名稱,在這種情況下,腳本是rsrc.php)之後的任何內容都將作爲數據庫的參數傳遞給腳本。我使用自己的圖像文件,你base64圖像,將其存儲在數據庫中,並通常與一些mod_rewrite魔術,你可以得到的圖像的網址是youtsite.com/images/fish-with-wings,當它是真的這樣做:yoursite.com/some-script.php/fish-with-wings這實際上是告訴數據庫尋找從數據庫中獲取圖像的位置,該圖像的標題是= fish-with-wings,並且它將base64爲那個文件。

擁有數據庫中所有內容的優點是,對於內容編寫者來說,更容易引用文件,並且可以刪除或清除,甚至可以用一些很酷的AJAX進行修改,並且停止盜鏈也很有用,在這裏完成,但你可以說,如果url是重定向到一個熱鏈接警告的完整路徑。

1

不要認爲這是關係到CDN目的,woulden't意義運行它通過一個「靜態」的服務就可以提供動態生成的內容。

我認爲然而,這可能被用來保持一個開放的連接,並通過Facebook更新推送數據,(這也正是XML會爲我做意義上的)。

+1

「內容分發網絡」和「動態ic生成的內容「? – KingCrunch 2011-01-28 08:43:36

+0

簡單,動態生成的內容有時會被緩存,然後推進到一個內容分發網絡(我們傳播的內容,它不是一個魔術盒) – 2011-01-28 09:23:32

+0

我不認爲這是在anyway..facebook僅緩存與動態內容使用Memcached進行MySQL查詢,但這不適用於靜態文件類型。 – kornesh 2011-01-30 17:39:45

0

所有腳本/ Facebook的CSS文件都存儲在數據庫和Facebook使用rsrc.php得到它們。

rsrc.php代碼可能是這樣的:

$request = basename($_SERVER["REQUEST_URI"]) 
if($request != " ") { 

$sql = "SELECT * FROM scripts"; 
$result = mysqli_query($conn, $sql); 

if (mysqli_num_rows($result) > 0) { 
    while($row = mysqli_fetch_assoc($result)) { 
     header('Content-type: '.$row["type"]); 
     echo $row["script"]; 
    } 
} 

} 
+0

這是非常不好的代碼:) – 2017-11-08 13:53:19

0

有一個我的版本rsrc.php的

$request = basename($_SERVER[REQUEST_URI]); 
$dotIndex = strrpos($request, "."); 
$extension = substr($request, $dotIndex+1); 
switch ($extension): 
    case 'js': $content_type="application/javascript"; break; 
    default: $content_type="text/css"; break; 
endswitch; 
$file = Gdecode($request); 
$script_file = dirname(__FILE__)."/".$extension."/".$file.".".$extension; 
$fp = @fopen($script_file, "r"); 
if($fp): 
    fclose($fp); 
    header('Content-type: '.$content_type); 
    echo file_get_contents($script_file); 
endif; 
+1

當給出答案時,最好給出[一些解釋,爲什麼你的答案](http://stackoverflow.com/help/how-to-answer)是一個。 – 2017-02-07 02:30:01

相關問題