2010-12-12 23 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 thực sự làm gì? Tôi biết rằng rsrc là viết tắt của tài nguyên và rsrc.php/z [ngẫu nhiên]/băm hoặc css/file.extenstion tải một tập tin từ somehwere.Điều gì trong thế giới của facebook là rsrc.php?

Giả sử/băm/hoặc/css/là một thư mục giữ các tệp như .xml .png .swf nhưng whats với z [random] điều và tại sao họ muốn tải một tệp từ một php? Là nó cho một cái gì đó giống như kiểm soát phiên bản cho tập tin hoặc những gì? Nếu vậy làm thế nào để làm điều đó (một cách đơn giản hơn)?

+0

tôi đoán là cho mục đích CDN – ajreal

+0

nhưng khi tôi thay đổi các liên kết từ http : //static.ak.fbcdn.net/rsrc.php/z7O0P/hash/4hw14aet.png tới http://static.ak.fbcdn.net/rsrc.php/z23ZQ/hash/4hw14aet.png không hoạt động và trả về/* bcs */nếu tất cả các tệp của nó là tất cả các tệp nên có sẵn trên tất cả các máy chủ – kornesh

Trả lời

7

Thật đơn giản, những tệp này được lưu trữ trong cơ sở dữ liệu. Bất cứ điều gì sau khi SELF (tên kịch bản, trong trường hợp này kịch bản là rsrc.php) được chuyển cho kịch bản như một tham số cho cơ sở dữ liệu. Tôi sử dụng bản thân mình trên các tập tin hình ảnh, bạn base64 hình ảnh, lưu trữ nó trong cơ sở dữ liệu và thường với một chút ma thuật mod_rewrite, bạn có thể lấy url của hình ảnh là youtsite.com/images/fish-with-wings khi nó thực sự thực hiện điều này: yoursite.com/some-script.php/fish-with-wings thực sự yêu cầu cơ sở dữ liệu tìm kiếm để lấy hình ảnh từ cơ sở dữ liệu, nơi tiêu đề là = cá-với-cánh, và nó phun ra base64 cho tệp đó.

Ưu điểm của việc có mọi thứ trong cơ sở dữ liệu là để người viết nội dung dễ dàng tham khảo tệp và bạn có thể xóa hoặc thanh lọc hoặc thậm chí sửa đổi bằng AJAX thú vị và nó cũng hữu ích để ngừng liên kết nóng. thực hiện ở đây nhưng bạn có thể nói, nếu url là đường dẫn đầy đủ chuyển hướng đến cảnh báo hotlink.

1

Đừng nghĩ rằng nó liên quan đến mục đích CDN, sẽ không có ý nghĩa khi chạy dịch vụ thông qua dịch vụ "tĩnh" để phân phát nội dung được tạo động.

Tôi nghĩ tuy nhiên điều này có thể được sử dụng để giữ kết nối mở và đẩy dữ liệu qua để cập nhật facebook, (đó là nơi xml có ý nghĩa đối với tôi).

+1

Mối quan hệ giữa một "Mạng phân phối nội dung" và "động lực ở đâu ic tạo ra nội dung "? – KingCrunch

+0

Nội dung đơn giản, được tạo động đôi khi được lưu trong bộ nhớ cache và sau đó được chuyển tiếp tới mạng phân phối nội dung, (chúng tôi đang phát tán nội dung, nó không phải là hộp ma thuật) –

+0

Tôi không nghĩ rằng điều này liên quan đến nội dung động trong anyway..facebook only cache Truy vấn MySQL bằng cách sử dụng Memcached nhưng điều này không áp dụng cho các loại tệp tĩnh. – kornesh

3

rsrc.php được sử dụng bởi Facebook để kiểm soát phiên bản của tất cả các tệp tĩnh, đặc biệt là hình ảnh, javascript và bảng định kiểu. Điều này cho phép Facebook áp dụng các thay đổi cho ngăn xếp ứng dụng chính bao gồm các thay đổi đối với các tệp nội dung tĩnh mà không vi phạm chức năng cho người dùng đang chạy phiên bản được lưu trong bộ nhớ cache cũ. Nó được xây dựng trong kiến ​​trúc Facebook như là một phần của hệ thống Haste.

  1. Reference To Code Function Identification By Original Developer
  2. Recommended Process For Managing Static Resources (phabricator.com)
0

Tất cả các kịch bản/file css của Facebook được lưu trữ trong cơ sở dữ liệu và Facebook sử dụng rsrc.php để có được chúng.

đang rsrc.php có thể trông như thế này:

$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

Đây là mã khá xấu :) –

0

Có một phiên bản của tôi về 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

Khi đưa ra câu trả lời, bạn nên đưa ra [một số giải thích là tại sao câu trả lời của bạn] (http://stackoverflow.com/help/how-to-answer) là một. –

Các vấn đề liên quan