Apache'ye LF'yi CRLF'ye text / plain için dönüştürmesini söyle


2

Sorun: CRLFolarak kodlanmış dosyalardan hizmet vermek istiyorumLF

Linux tabanlı bir simülatör tarafından oluşturulan (büyük) günlük dosyalarını ( ) sunmak üzere yapılandırılmış bir apache2 httpd linux tabanlı web sunucum var *.log.

Bu günlük dosyaları, LFWindows tarzı yerine Unix tarzı biter CRLF. CRLFayrıca httpprotokoldeki metin dosyaları için standart olduğu ortaya çıkıyor .

Onları Windows'ta bir tarayıcı kullanarak görüntülediğimde Notepad.exe'ye yüklenir ve tüm metinler aynı satırda (yanlış) olur; Ben gelen sunucuda günlükleri adlandırmak sürece *.logkadar *.txt.

Görünen o ki, Microsoft Windows muhtemelen *.txtözel olarak çalışıyor ve geldikleri gibi sonları dönüştürüyor gibi görünüyor .

Bu ipuçları göz önüne alındığında, kurulumu nasıl değiştirebilirim ki müşteri kullanıcılarının platform / tarayıcıdan bağımsız olarak dosyaları doğru görebilsinler.


Daha fazla sorun detayı: neden bariz şeyi yapamıyorum

Günlükleri analiz, bunu bulmak .txtmim-türü olarak servis edilir text/plainve .logsıra text/x-logfakat anahtarlama .logiçin text/plainkullanarak SetTypesorunu çözmek vermedi.

Bir üretim sisteminde kolayca sona erecek dosyaları değiştiremeyeceğim .txt.

Günlükleri kullanarak (örneğin unix2dos) dönüştürmek ve başka bir kopya kaydetmek istemek benim için çok büyük ve büyük . Ayrıca bu, geçersiz kılınması, silinmesi, vb. Yapılması gereken, dönüştürülen dosyaların ek önbelleğini yönetmeye zorlar veya bunları tüketen diğer sistemleri bozabilecek orijinal dosyaları değiştirir.

  1. O genişletmek gerektiğini Windows'u / Internet Explorer (ve diğer işletim / tarayıcı) söyleyen bir Apache yapılandırma parametresi var mıdır LFiçin CRLFulaştığı anda?
  2. YA ben bir şekilde yerine Apache söyleyebilir LFile CRLFbunu hizmet vermektedir olarak anında?

Ne denedim

Birlikte verilen Apache mod_mimemodülüne ve direktiflerine baktım AddTypeve AddCharsetbunlar sorunu çözmedi, hatta iddia etmediler.

Apache belgeleri satır sonuyla ilgili sessiz.

Türdeki MIME belgeleri text, içeriğin CRLF biçiminde olması gerektiğini belirtir .

Ayrıca satır sonunun karakter kümesi kodlama standartları tarafından dikkate alınmadığı da anlaşılmaktadır.

Yanıtlar:


3

Not Defteri'nde (şiddetli bir IMHO) sınırlamasıyla ilgili çok fazla sorun yaşayacağınız görülüyor. Sisteme daha akıllı bir metin editörü kurmak mümkün mü, örneğin Notepad ++?


Anlaşmak. text/plainCRLF sonları ile sunulması ilginç olsa da , Apache'nin bunları dönüştürmede yer alması gereken bir şey değil; Sunmak için verilenlere hizmet etmeyi ve dosyaları üreten her ne olursa olsun RFC'ye uyum sağlamayı tercih ederim. Daha iyi bir editör edinin; Tavsiye yığınına Scite atacağım .
Shane Madden

1
text/plain CRLFSpesifikasyona göre, hat sonları ile servis edilmelidir . Kullanıcılarımdan farklı bir metin editörü kullanmalarını talep edemiyorum. Üretme işlemi, ana makine için doğru satır sonları üretiyor - unix.
Alex Brown

3

Yerleştirdiğim (kusurlu) çözüm Apache'nin kullanımı mod_ext_filter:

ExtFilterDefine logwin mode=output cmd=/usr/bin/unix2dos intype=text/x-log
AddOutputFilter logwin .log
# Note that apache2 defines .log as having mime-type text/x-log by default.

Temel olarak, bu, biten herhangi bir dosya .logiçin istemciye teslim edilmeden önce bir satır sonu dönüştürücüsünden geçirilmesi gerektiğini söylüyor.

Bu, ağır yüklü makineler için harika bir çözüm değildir, çünkü unix2dosistifleme apache işlemine dahili olarak göre daha yavaştır. Ayrıca verimsiz olan dosyanın her okuması için dönüşüm gerektirir.

Maalesef, apache temeli bu senaryo için yerleşik bir mod filtresi sağlamadı ve birini yazmak / sürdürmek için zamanım yok.

Ancak, bu makine üzerinde yüksek bir yük beklemiyorum, bu nedenle mühendislik çabalarıyla ölçülüyor, bu iyi bir çözüm.

  • Kabloyu kodlayarak mimemetin / ova için verilen özelliklere uygundurCRLF
  • Müşteri tarafında özel bir işlem gerektirmez. Daha iyi bir metin editörü kullanmaktan mutlu olduğum halde, tüm kullanıcıların değişmesini beklemiyorum.
  • Web sunucularını taşımam gerekirse yeniden yapılandırma kolay
  • Günlük oluşturucusunun yerel olmayan (unix olmayan) bir satır sonu formatı kullanmasını gerektirmez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.