问题 facebook的世界是什么rsrc.php?


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加载一个文件。

假设/ hash /或/ css /是一个文件夹,它保存像.xml .png .swf这样的文件,但是z [随机]的东西是什么以及他们为什么要从php加载文件?它是用于文件的版本控制还是什么?如果是这样的话(以更简单的方式)?


2968
2017-12-12 13:38


起源

我的猜测是出于CDN的目的 - ajreal
但是当我改变链接时 static.ak.fbcdn.net/rsrc.php/z7O0P/hash/4hw14aet.png 至 static.ak.fbcdn.net/rsrc.php/z23ZQ/hash/4hw14aet.png 它不工作并返回/ * bcs * /如果它是一个cdn thingy所有文件应该在所有服务器上可用 - kornesh


答案:


很简单,这些文件存储在数据库中。 SELF之后的任何内容(脚本名称,在本例中为脚本是rsrc.php)都作为数据库的参数传递给脚本。我在图像文件上使用自己,你将图像存储起来,将它存储在数据库中,并且通常使用一些mod_rewrite魔法你可以获得图像的网址为youtsite.com/images/fish-with-wings这样做:yoursite.com/some-script.php/fish-with-wings真正告诉数据库要查找从数据库获取图像的标题是= fish-with-wings,并且它吐出base64该文件。

拥有数据库中的所有内容的优点是,对于内容编写者来说,它更容易引用文件,你可以删除或清除,甚至用一些很酷的AJAX进行修改,这对于停止热链接也是有用的,facebook在这里没有做但是你可以说,如果网址是完整路径,则重定向到热链接警告。


9
2017-09-22 22:36





Facebook使用rsrc.php对所有静态文件进行版本控制,尤其是图像,javascript和样式表。这允许Facebook将更改应用于主应用程序堆栈,包括更改静态内容文件,而不会破坏运行旧缓存版本的用户的功能。它作为Haste系统的一部分内置于Facebook架构中。

  1. 原始开发人员参考代码功能识别
  2. 管理静态资源的推荐流程(phabricator.com)

4
2018-06-16 07:34





不要认为它与CDN的目的有关,因此通过“静态”服务运行它来提供动态生成的内容是没有意义的。

我确实认为这可能用于保持开放连接,并推送数据通过Facebook更新,(这是xml对我有意义的地方)。


1
2018-01-28 08:38



“内容分发网络”和“动态生成内容”之间的关系在哪里? - KingCrunch
简单,动态生成的内容有时会被缓存,然后推送到内容分发网络(我们传播内容,它不是魔术盒) - Michael R
我认为这无论如何都与动态内容有关.facebook只使用Memcached缓存MySQL查询,但这不适用于静态文件类型。 - kornesh


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-10-23 12:37



这是非常糟糕的代码:) - Paul Denisevich


我的版本是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;

0
2018-02-07 02:05



给出答案时,最好给予答案 关于为什么回答的一些解释 是这一个。 - Stephen Rauch