PHP dosyası yüklenenler - Arapça / Çince / Japonca dosya adlarını Taşıma

3 Cevap php

Ben bir sistem var nerede bir kullanıcı yüklenenler belge (pdf, word vb) sorun, yabancı kullanıcılar Arapça, Çince, Japonca ve sistem, onları idare edememek, veritabanına ekliyor dosya adlarını karşıya ediliyor.

Sorun doğar nerede php kullanarak dosyaları indirmek için çalışıyor:

$result = mysql_query($query) or die('Error, query failed');

list($filename, $type, $filesize, $filepath) = mysql_fetch_array($result);

header("Content-Disposition: attachment; filename=$filename");

header ("Content-length: $ dosyaboyu");

header ("Content-type: $ tip");

readfile ($ dosyayolu);

Sistem, böylece dosya indirmek değil, dosya tanımıyor. Herhangi bir öneriniz?

3 Cevap

Ben bir veritabanı tablosunda id, orijinal dosya adını ve uzantısını kaydederek, yüklenen her dosya için benzersiz bir kimlik oluşturma ve bu kimliği kullanarak dosyayı yeniden adlandırarak bu sorunu kaçınmışlardır. Sonra kolayca tabloda istenen kimliği arama yapabilirsiniz, orijinal dosya (İnsan okunabilmesi için gösterilecek olabilir) ve uzantısı almak ve sonra {id} indirin. {} Dosya uzantısı.

Bu aynı zamanda iki dosya aynı adla tarih ise, ikincisi yükleme orijinali üzerine yazmaz ki yararı vardır.

Bu php 5 ve linux kadar (örneğin, 我 是 神. Doc) gibi Unicode isimleri yüklemek için karışık, ben çeşitli OS gibi dosya adlarını desteklemiyor şüpheli

Sizin için bir alternatif, bazı özel isimler {dosya-id}. Doc olması ve veritabanı tablosundaki (orijinal dosya gibi) bilgi depolamak, Ve indirme sayfasında tablo içeren bilgi depolanan bilgi başlıklarını değiştirebilirsiniz olabilir onları yükler için o dosya için

Eğer MySQL dosya adlarını saklamak gerekiyorsa, utf8_unicode_ci gibi, uygun tablo ve sütun alfabe yaşıyorsanız emin olun. Ve mysql_query("SET NAMES utf8"); bağladıktan sonra yapmak unutmayın. Bu düzgün Unicode dizeleri depolamak ve almak için yeterli olmalıdır.

Content-Disposition başlık ve non-ASCII dosya adları için, bu iyi bir cevabı zaten var: "How to encode the filename parameter of Content-Disposition header in HTTP?"