URL Bazı Dosya Uzantıları Has eğer Rackspace Bulut $ _SESSION Şeritleri

2 Cevap php

The Situation

Ben geleneksel LAMP yığınını (RACKSPACE bulut Windows ve LAMBA yığınları hem vardır) kullanarak Rackspace Cloud üzerinde bir müşteri için bir video eğitim sitesi oluşturma. Müvekkilim onlara ulaşmak için para ücretleri gibi ben bu sitede hizmet ediyorum video ve diğer medya dosyalarını korunması gerekir. Böyle hiçbir DRM veya komik iş aslında biz web kök dışındaki dosyaları depolamak ve PHP ile isteği çalıştırmak için mod_rewrite kullanarak dosyalara erişmek mümkün önce kullanıcının kimliğini doğrulamak için PHP kullanmak vardır.

Yani kullanıcı bu URL bir dosya istediğinde diyelim:

http://www.example.com/uploads/preview_image/29.jpg

Ben o url yeniden yazma mod_rewrite kullanıyorum:

http://www.example.com/files.php?path=%2Fuploads%2Fpreview_image%2F29.jpg

İşte files.php komut basitleştirilmiş bir versiyonu:

<?php
// Setups the environment and sets $logged_in
// This part requires $_SESSION
require_once('../../includes/user_config.php');

if (!$logged_in) {
    // Redirect non-authenticated users
    header('Location: login.php');
}

// This user is authenticated, continue

$content_type = "image/jpeg";

// getAbsolutePathForRequestedResource() takes 
// a Query Parameter called path and uses DB
// lookups and some string manipulation to get
// an absolute path. This part doesn't have
// any bearing on the problem at hand
$file_path = getAbsolutePathForRequestedResource($_GET['path']);

// At this point $file_path looks something like
// this: "/path/to/a/place/outside/the/webroot"

if (file_exists($file_path) && !is_dir($file_path)) {
    header("Content-Type: $content_type");
    header('Content-Length: ' . filesize($file_path));
    echo file_get_contents($file_path);
} else {
    header('HTTP/1.0 404 Not Found'); 
    header('Status: 404 Not Found');
    echo '404 Not Found';
}
exit();

?>

The Problem

Bana bu benim için mükemmel çalışır söyleyerek başlayalım. Yerel test makineleri üzerinde bir cazibe gibi çalışır. Ancak bir kez bu çalışma durur bulut konuşlandırıldı. Bazı ayıklama sonra çıkıyor bu bulut bir istek. JPG,. PNG veya. SWF (genellikle statik medya dosyalarının yani uzantıları.) Isteği Vernik adında bir önbellek sistemine yönlendirilir gibi bazı dosya uzantıları varsa. Bu yönlendirme sonuç zaman bütün bu süreç oturumu mevcut değil benim PHP komut dosyası yapar olmasıdır.

Hatta Vernik atlanır bir sorgu parametresi ve PHP komut dosyası eklerseniz. PHP URL uzantısı değiştirmek veya eğer oturumu alabilirsiniz. Sorun yok değil mi? Ben sadece benim isteklerine anlamsız bir sorgu parametresi ekleyeceğiz!

Here is the rub: Ben bu sistem sayesinde hizmet ediyorum ortam dosyaları sıfır kontrole sahip derlenmiş SWF dosyaları ile talep edilmektedir. Bunlar üçüncü parti yazılım tarafından oluşturulan ve onlar talep URL'leri ekleme veya değiştirme umudumuz yok.

Ben bu konuda herhangi bir başka seçenekler var mı?

Update: Ben Rackspace desteği ile bu davranış doğrulanmış ve onlar bu konuda yapabileceği bir şey yok dedi dikkat etmelisiniz.

2 Cevap

Talep flaş uygulaması yönlendirmeleri takip ediyorsa, ben ilk istek üzerine bir yönlendirme ile cevap ve ikinci bir örneğin yeniden denemek istiyorum

GET .../29.jpg

karşı

header("Status: 302 Moved temporarily");
header("Location: .../r.php?i=29.jpg&random=872938729348");

Sonra r.php ikinci isteği üzerine dosyayı sunar.

Değilse (btw. her zaman), ben açıkça Vernik kabul eder ve buna göre davranır statik dosyaları gibi bir şey sunma ile birlikte başlıkları göndermek istiyorsunuz

header("Cache-Control: no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

And: I would place the exit(); command after your first header() statement karşı be sure the rest of the script is not executed. header() sends just headers.

I find it also more reliable karşı use ob_start() as whitespace in your PHP file may lead karşı annoying errors when adding headers.

Ben aynı durum var, ve ben daha iyi bir yanıt için umut Rackspace temas ettik.

Ben bir tane var! Birlikte önbelleğe değiştirmek / atlamak için yarım düzine yolu özetleyen bir bölümü koyduk:

http://cloudsites.rackspacecloud.com/index.php/How_can_I_bypass_the_cache%3F