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加载文件。Facebook的世界里有什么是rsrc.php?
假设/哈希/或/ css /是一个文件夹,它保留了像.xml .png .swf这样的文件,但是什么是z [random]的东西,他们为什么要从php加载文件?是否为文件的版本控制或什么?如果是这样的话(以一种更简单的方式)?
很简单,这些文件存储在数据库中。在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是重定向到一个热链接警告的完整路径。
不要认为这是关系到CDN目的,woulden't意义运行它通过一个“静态”的服务就可以提供动态生成的内容。
我认为然而,这可能被用来保持一个开放的连接,并通过Facebook更新推送数据,(这也正是XML会为我做意义上的)。
“内容分发网络”和“动态ic生成的内容“? – KingCrunch 2011-01-28 08:43:36
简单,动态生成的内容有时会被缓存,然后推进到一个内容分发网络(我们传播的内容,它不是一个魔术盒) – 2011-01-28 09:23:32
我不认为这是在anyway..facebook仅缓存与动态内容使用Memcached进行MySQL查询,但这不适用于静态文件类型。 – kornesh 2011-01-30 17:39:45
rsrc.php为所有静态文件,特别是图片,JavaScript和样式表的版本控制使用Facebook的。这允许Facebook将更改应用于主应用程序堆栈,包括对静态内容文件的更改,而不会破坏正在运行旧缓存版本的用户的功能。它作为Haste系统的一部分内置于Facebook架构中。
所有脚本/ 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"];
}
}
}
这是非常不好的代码:) – 2017-11-08 13:53:19
有一个我的版本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;
当给出答案时,最好给出[一些解释,为什么你的答案](http://stackoverflow.com/help/how-to-answer)是一个。 – 2017-02-07 02:30:01
我的猜测是CDN目的 – ajreal 2010-12-12 13:44:23
但是当我改变来自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