2010-12-12 10 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 

Che cosa fa veramente rsrc.php? So che rsrc sta per resource e rsrc.php/z [random]/hash o css/file.extenstion carica un file da qualche parte.Cosa c'è nel mondo di facebook rsrc.php?

Assumendo/hash/o/css/è una cartella che conserva i file come .xml .png .swf ma che cosa è con la cosa z [random] e perché vogliono caricare un file da un php? È per qualcosa come il controllo della versione per il file o cosa? Se sì, come farlo (in un modo più semplice)?

+0

la mia ipotesi è per CDN scopo – ajreal

+0

ma quando cambio il link http : //static.ak.fbcdn.net/rsrc.php/z7O0P/hash/4hw14aet.png a http://static.ak.fbcdn.net/rsrc.php/z23ZQ/hash/4hw14aet.png non funziona e ritorna/* bcs */se è un cdn thingy tutti i file dovrebbero essere disponibili su tutti i server – kornesh

risposta

7

È semplice, questi file sono memorizzati in un database. Qualunque cosa dopo il SELF (il nome dello script, in questo caso lo script è rsrc.php) viene passato allo script come parametro per il database. Uso me stesso su file immagine, l'immagine base64, la memorizzo nel database e di solito con un po 'di magia mod_rewrite puoi ottenere l'URL dell'immagine come youtsite.com/images/fish-with-wings quando è veramente facendo questo: yoursite.com/some-script.php/fish-with-wings che sta veramente dicendo al database di cercare l'immagine dal database dove title = fish-with-wings, e sputa la base64 per quel file.

I vantaggi di avere tutto nel database sono che per gli scrittori di contenuti è più facile fare riferimento a un file e si può cancellare o spurgo, o anche modificare con un po 'fredda AJAX ed è anche utile per fermare hotlinking, che Facebook non ha fatto qui ma si potrebbe dire, se l'url è il percorso completo il reindirizzamento a un avviso hotlink.

1

Non pensare che sia correlato agli scopi di CDN, non avrebbe senso eseguirlo attraverso un servizio "statico" per pubblicare contenuti generati dinamici.

Penso tuttavia che questo potrebbe essere utilizzato per mantenere una connessione aperta e spingere i dati per gli aggiornamenti di Facebook, (è qui che l'xml avrebbe senso per me).

+1

Dove si trova la relazione tra "Content Distribution Network" e "dynam" contenuto generato da ic "? – KingCrunch

+0

Il contenuto generato semplice e dinamico a volte viene memorizzato nella cache e quindi inoltrato a una rete di distribuzione del contenuto (stiamo diffondendo il contenuto, non è una scatola magica) –

+0

Non penso che questo sia collegato a contenuti dinamici in ogni caso. Query MySQL usando Memcached ma questo non è applicabile per i tipi di file statici. – kornesh

3

rsrc.php è utilizzato da Facebook per il controllo della versione di tutti i file statici, in particolare immagini, javascript e fogli di stile. Ciò consente a Facebook di applicare modifiche allo stack principale dell'applicazione, incluse le modifiche ai file di contenuto statico senza compromettere la funzionalità per gli utenti che stanno eseguendo una vecchia versione cache. È integrato nell'architettura di Facebook come parte del sistema di celerità.

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

Tutti script/file CSS di Facebook sono memorizzati nel database e Facebook utilizza rsrc.php per farli.

codice rsrc.php può apparire come segue:

$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

Questo è un codice piuttosto scadente :) –

0

C'è una mia versione di 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

Quando si dà una risposta è preferibile dare [qualche spiegazione su PERCHÉ la risposta] (http://stackoverflow.com/help/how-to-answer) è quella giusta. –

Problemi correlati