BilgisayarlarDosya türleri

PHP: sunucuya dosya yükleme

PHP yoluyla dosya indirme - çok ilginç bir durum, hangi çok dikkatli olunması gerekir için. İnternette dosya yükleme uygulanması sayısız örnekler bulabilirsiniz, ancak bunların hepsi iyi ve güvenlik düzenlemeleriyle uyumludur.

Böyle şeyler uzun zaman alsa bile, bir sonuca getirmek gerekir. Eğer kodda bir boşluk bırakırsanız, o zaman tüm sunucu tehlikeye girebilir.

emniyet

PHP ile dosyanın karşıya sunucu oldukça kolay gerçekleştirilir için. Kod çok kısa ve basittir. çizgilerin bir çift. Ancak bu yöntem tehlikelidir. Çok fazla zaman ve uzak güvenliğine kod satırları.

tehlike Eğer denetimler yapmazsak, herhangi saldırganın sunucuda kendi komut yükleyebilir, olmasıdır. Bu durumda, tam erişebilecek. O ne isterse yapabilir:

  • veritabanını silmek;
  • dosyaları siteleri silme;
  • dosyaları siteleri değiştirmek;
  • web reklamınızı ekleyin;
  • virüs indirmek;
  • Tüm kullanıcıları kendi sitelerinde yönlendirme;
  • ve gelen pek çok başka şeyler saldırganı akla.

Her zaman kullanıcı için bir dosya indirmek için girişimleri olduğunu kontrol etmelidir. Yalnızca resim yüklemek Örneğin, dosya bir görüntü doğru olduğunu doğrulamak için gereklidir. Aksi takdirde, her şeyi indirecektir.

Tam doğrulamayı nasıl uygulanacağı, bu dosya yüklemek direkt muayene komut dosyası ile, gösterilecektir.

PHP form oluşturma

Dosya yükleme formu çok basittir. göz düğme ve yükleme düğmeleri eksik.

kolay olması, formlar olmaz nasıl oluşturulacağını açıklar. Daha ayrıntılı talimatları zaten HTML temel kavramlar (aksi takdirde PHP üzerinde indirmekle ilgili bilgi edinmeye olmaz) olduğunu varsayalım.

Ama formda verileri enctype öznitelik eklemek gerektiğini unutmayın.

Aksi halde, dosya işleyicisi verileri iletilmez.

Nasıl çalışır gerekir?

Eğer göz at düğmesini tıkladığınızda bir dosya seçmek istedi bir kutu göreceksiniz.

Bundan sonra o dosyanın bulunduğu güzergah alması için gerekli olacaktır.

yol görünmüyorsa, yeniden eylemi gerçekleştirmek.

dosya indirme işleyicisi tıkladıktan sonra herhangi bir bilgi verebilir.

Örneğin, dosya "falan" adı başarıyla "filanca" klasörüne yüklendi olduğunu belirten satır yazabilirim. Tabii ki, dosya adı her zaman farklı verilecektir.

Genellikle, bu bilgilerin hata ayıklama kodu için kullanılır. Nedenle, veri iletimi ve yazma istenen dizinde meydana doğrulamak mümkündür. Yani, hatta dosya adı belirtilmez edilir. Bu ek bilgilerin yana kullanıcı ihtiyacı olmadığını.

Bu çıkışa kullanıcı birden fazla dosya indirir yalnızca adını mantıklı. Böyle, biraz daha düşünün durumdur. Kendimizi tehlikeye olmayalım.

ayarlama

Sunucuya PHP dosya yükleme php.ini dosyasında yapılmalı belirli ayarları gerektirir. Bu dosya ayarları bir sürü içerir. Hepsi ihtiyacımız yok. file_uploads, upload_tmp_dir ve upload_max_filesize: Biz üç satır ilgileniyor.

Bu ayarlar, sunucu üzerinde sadece herhangi birini Tüm sitelerinizi etkileyeceğini unutmayın. Bu nedenle, kullanıcıların yüklemek zorunda kalacak gerçeğine dayanarak maksimum boyutu ayarlamak için. Çok büyük ayarlamak için tavsiye edilmez.

bu parametrelerin değerleri değiştirdikten sonra, sunucuyu yeniden başlatmanız gerekiyor. Onlar sunucu yükünün anda okundu olarak Aksi takdirde ayarları geçerli olmaz.

Sunucuya SSH üzerinden bağlanarak konsolda yapabilirsiniz. Basitçe komut httpd servisi yeniden girin ve ardından ayarları etkili olur.

Başka bir yöntem - ISP-masasından veya fatura paneli sağlayıcı üzerinden bir yeniden başlatma.

Dizi dosyası

PHP dosya yükleme dizisi $ _FILES tarafından yapılır. Biz indirmek dosyaları hakkında tüm bilgileri içerir.

Aşağıdaki dosya işleyicisi yazmak için yeterli dizide, içerdiği hangi bilgilerin görmek için.

Herhangi bir dosya seçip tıklayın "Yükle". işleyici sayfada $ _FILES depolanan bilgiler gösterecektir. Değişken büyük harflerle tamamen yazılmıştır. PHP - Dile duyarlı.

Gördüğünüz gibi, bu dizide alanların bir yeri vardır. Hepsi bizim için önemlidir. ilk alan bilgisayarınızda kullanıldığı şeklinde dosya adını içerir.

tipi sütun dosya tipini belirtildi. Tmp_name alan geçici dosyanın adına karşılık gelir. script bittikten sonra silinecektir.

Hata alan bir hata kodu içerir. Bu biraz daha oldu. Boyut - bayt cinsinden boyutu.

hatalar

PHP dosya yükleme yoluyla yürütülen her zaman hata kodu eşlik eder. "Hata" girilen bir hata iletisi. ekran hatası sıfırdır.

tüm hataların değerini göz önünde bulundurun:

Her zamanki HTML belirtilebilir parametresi hakkında yukarıda söyleniyordu.

İşte yüklenen dosyanın miktarının bir sınırı belirtir dosyayı indirmek için örnek bir formudur.

PHP: Dosya yükleme komut

Bütün pratikte yürütülen gibi? PHP dosya yükleme kopya komutu oluşur. Kaynak dosyayı ve hedef dosya - Bir dosya indirmek için nasıl sorusuna ilgilenen, bu sorunun cevabı iki parametre kullanır basit kopyalamaya karşı vardır.

Yukarıda belirtildiği gibi, bu güvenlik nedenleriyle sınırlı olamaz. Örneğin, gemi, dizinin $ _FILES saha türü kullanabilirsiniz dosya türünü göz atın. İlk olarak, muayene ile anlaşma ve sonra tam senaryoya geçelim

Diyelim ki kullanıcılar sadece GIF, JPEG veya PNG çözünürlüğe sahip bir fotoğraf yüklemek için izin vermek istediğinizi varsayalım. Böyle olabilir belirtiniz.

if ($ _ FILES [ 'file_upload'] [ 'type']! = "image / gif") {
"Maalesef yalnızca Gif-Files indirdikten destekler" echo;
çıkış;
}

Tüm 3 tip gemi istiyorsanız, basitçe görüntünün diğer türüne ek koşul ekleyin.

kopya (resmin 1, görüntü 2): Kopyalama böyle yapılır.

Bizim durumumuzda, iş sunucuya PC'den indirirken zaman, bunu yapabilirsiniz

Kopya ($ _ FILES [ 'file_upload'] [ "tmp_name"], "1.jpg")

Bu dosya adı 1.jpg ile kopyalanacaktır vardır. Bu tam olarak doğru değildir. Bu durumda, sadece bir örnektir. Dosya adı, dosyaya bağlı uzantısı farklı belirtin ve belirtmek için her zaman gereklidir.

Uzatma farklı yolları olabilir belirler. O tüm bilginin geliştirici bağlıdır. (Saniyenin onda bir fark) uzantısını belirlemek için en hızlı yollarından biri - bu bir sonraki kodudur.

$ PAT_INFO = pathinfo ($ _ dosyaları [ 'photo1'] [ "adı"]);

$ Dahili = $ PATH_INFO'yu [ 'uzantı'];

Değişken $ ext biz arzu uzantıyı saklayacaktır. Bir dosya adı rasgele kullanarak md5 ayarlanabilir. Dosyaların çok indirmek için planlıyorsanız, farklı klasörlere yollayabilirsiniz daha iyidir. Bu yüzden daha uygun olacaktır. Özellikle, tasfiye etmek istiyorum.

aşağıdaki gibi olacaktır kodu indirmek için.

/// Fotoğraflı

if ($ _FILES [ 'photo1'] [ 'tmp_name'] == null)

{

echo ( "

Bilinmeyen dosya.

Geri ... ");

çıkış;

}

///. sunucuda herhangi bir proje için teşekkür Say büyük dosyaları (video) yüklemek için izin verilir, ancak sadece resim var ve kullanıcıların sınırlamak gerekir

if (($ _FILES [ "photo1"] [ "boyut"]> 1024 * 2 * 1024)

{

?>

izin verilen maksimum boyutu 2 MB

Geri ...

çıkış;

}

klasörler oluşturabilirsiniz //

// geçerli ay bir klasör oluşturun

if (! file_exists ( "img /". tarihi ( "M")))

{

mkdir ( "img /" tarihi ( "M").);

}

// geçerli günün bir klasör oluşturun

if (! file_exists ( "img /". tarihi ( "M"). "/". tarihi ( "d")))

{

mkdir ( "img /" tarihi ( "M") "/" tarihi ( "d") ...);

}

/// dosya uzantısı

$ PAT_INFO = pathinfo ($ _ dosyaları [ 'photo1'] [ "adı"]);

$ Dahili = $ PATH_INFO'yu [ 'uzantı'];

dosya oluşturmak ///

$ Id md5 (tarih ( "Ymd")) =;

if (kopyası ($ _ FILES [ 'photo1'] [ "tmp_name"], "img /". tarihi ( "M"). "/". tarihi ( "d"). "/". $ id. $ ext) )

{

echo ( "başarıyla yüklendi Dosya");

}

/// başka bir işlem (veritabanında da, vb., N.)

}

birden fazla dosya

birden fazla dosya (PHP) yükleme biçiminde ek alanlar vasıtasıyla gerçekleşir.

o indirmek için dosya sayısını sınırlar gibi bu yöntem, çok iyi değil. Ayrıca, programlamada kötü formu olarak kabul edilir. Dinamik herşeyi yapmaya çalışın.

İdeal seçenek - tek bir düğmeye basarak aynı anda dosyaların büyük sayısının bir seçimdir.

Bunu yapmak için, bu kodu gibi bir şekil oluşturun.

sözcüğün birden ilave unutmayın ve adı, bir dizi [] olarak verilir. Bu durumda, $ _FILES dizi biraz farklı olacaktır. Dizinin bir dizi alacak.

Yine var_dump ($ _ FILES) kullanabilir test etmek;

Tüm dosyalarınız böyle dizide yer alacak:

  1. $ _FILES [ "dosya1"] [ "name"] [0]
  2. $ _FILES [ "dosya1"] [ "name"] [1]
  3. Ve böyle devam eder.

Parantez içinde dizideki dosya numarasını yazılır. sıfırdan Sayma. Biz sadece döngüsünü sormak ve endeks ekleyerek [$ i] sonunda yukarıda açıklanan kod ile temasa geçerek, aynı şekilde davranarak.

$ I = 0;

while ($ _FILES [ "dosya1"] [ "name"] [$ i] <> '')

{

/// Yukarıdaki kodu yapıştırın

}

Dosyaların statik numarası (son fotoğraf) ile sürümünü kullanıyorsanız genellikle olduğu gibi Böylece, kod gereksiz tekrarlama olmadan bir döngüde sunucuya bir PHP dosya yükleme yoluyla gerçekleşmesi gerekir.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 tr.birmiss.com. Theme powered by WordPress.