MediaWiki nasıl görüntü yolları oluşturmak mı?

3 Cevap php

Birden wiki sayfasından MediaWiki SQL tablolar ve görüntüler verileri ayrıştırır bir Perl uygulaması var. Ben görüntülemek için yeniden oluşturmak mutlak resim yolu edebilmek için gereken görüntüler, örneğin: .../f/fc/Herbs.jpg/300px-Herbs.jpg

MediaWiki Manual:

Image_Authorisation: "[image] yol dosya adı kolayca hesaplanabilir ve ... olabilir"

Nasıl yol hesaplanır?

3 Cevap

Mümkün bir yol (bir veritabanı veya dosya kimliğini) dosyanın MD5 imzasını hesaplamak olabilir, ve sonra buna göre yolunu bulmak / kurmak istiyorum.

Örneğin, "1ff8a7b5dc7a7d1f0ed65aaa29c04b1e" gibi bir MD5 imza almak demek

Yol "/ 1f / f" veya "/ 1f/ff/8a" gibi görünebilir

Nedeni 1 klasördeki tüm dosyaları istemiyorum olduğunu, ve aynı derecede yayılmış-çıkış yolu farklı sunucular arasında "bölümü" onları, ya da bir SAN veya ne olursa olsun yeteneğine sahip istiyorum.

MD5 imza 16 "hex" bir karakter dizesidir. Yani "/ 1f/ff/8a" bizim örnek bize bu herkes için yeterli olmalı içeri dosyalarını depolamak için 256 * 256 * 256 klasörleri verir :)


Yoğun talep nedeniyle güncelleme:

NOTE - Ben sadece biz MediaWiki bunu nasıl hakkında özel bahsediyoruz gerçekleşmiştir. Bu not şimdi MediaWiki yapar, ama başka hangi yolu o could have been done.

: "MD5 imza" Ben böyle bir şey (Perl kod örnekleri) yaparak ortalama ile

use Digest::MD5 'md5_hex';
my $sig = md5_hex( $file->id );

$ Sig 32 alfa-sayısal karakter uzunluğunda şimdi: "1ff8a7b5dc7a7d1f0ed65aaa29c04b1e"

Sonra böyle bir klasör yapısını oluşturmak:

my $path = '/usr/local/media';
map { mkdir($path, 0666); $path .= "/$_" } $sig =~ m/^(..)(..)(..)/;
open my $ofh, '>', "$path/$sig"
  or die "Cannot open '$path/$sig' for writing: $!";
print $ofh "File contents";
close($ofh);

Klasör yapısı gibi görünüyor

/
  usr/
    local/
      media/
        1f/
          f8/
            a7/
              1ff8a7b5dc7a7d1f0ed65aaa29c04b1e

Kabul cevabı yanlıştır:

  • Bir dize MD5 toplamı 32 onaltılık karakter (128 bit) değil, 16
  • Dosya yolu dosyanın MD5 toplamı değil dosyasının kendisini içeriği hesaplanır
  • Yolundaki ilk dizin ilk karakter ve ikinci dizin birinci ve ikinci karakterdir. Dizin yolu ilk 3 veya 6 karakterden oluşan bir kombinasyon değil.

'Herbs.jpg' MD5 toplamı fceaa5e7250d5036ad8cede5ce7d32d6 olduğunu. İlk 2 karakter örnekte verilen ne dosya yolu f / fc / vererek, 'fc' vardır.

PHP size URL almak için aşağıdaki işlevi çağırabilirsiniz. Onların yolu hesaplamak nasıl anlamaya php koduna bakmak isteyebilirsiniz.

$url = wfFindFile(Title::makeTitle(NS_IMAGE, $fileName))->getURL();