在facebook的世界里rsrc.php是什么?

mhd8tkvw  于 2023-03-28  发布在  PHP
关注(0)|答案(5)|浏览(116)
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. extension从某个hwere加载一个文件。
假设/hash/或/css/是一个文件夹,其中保存了. xml.png.swf这样的文件,但是z[random]是什么意思?为什么他们要从php加载文件?是为了文件的版本控制还是什么?如果是这样,如何做(以更简单的方式)?

xvw2m8pv

xvw2m8pv1#

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

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

pexxcrt22#

我认为这些文件存储在数据库中。SELF(脚本名称,在这种情况下脚本是rsrc.php)之后的任何内容都将作为数据库的参数传递给脚本。我使用自己的图像文件,你base64图像,将其存储在数据库中,通常使用一点mod_rewrite魔法,当它真正这样做时,你可以将图像的URL设置为youtsite.com/images/fish-with-wings:yoursite.com/some-script.php/fish-with-wings,它实际上是告诉数据库查找从数据库中获取图像,其中title = fish-with-wings,它为该文件输出base64。
在数据库中拥有所有内容的优点是,对于内容作者来说,更容易引用文件,您可以删除或清除,甚至使用一些很酷 AJAX 进行修改,并且停止热链接也很有用,Facebook在这里没有这样做,但你可以说,如果URL是完整路径,则重定向到热链接警告。

hivapdat

hivapdat3#

有一个我的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;
pqwbnv8z

pqwbnv8z4#

不要认为它与CDN目的有关,通过“静态”服务来提供动态生成的内容是没有意义的。
不过我确实认为这可能是用来保持一个开放的连接,并通过facebook更新推送数据,(这就是xml对我有意义的地方)。

a11xaf1n

a11xaf1n5#

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"];
    }
}

}

相关问题