Dosyaları sunucuya yükleme. Yardım için dosyalar alın PHP Bir php dosyası nasıl alınır

Bugün sizlere ek PHP betikleri için sunucuya dosya yüklemeleri ile ilgili çeşitli durumlardan bahsetmek istiyorum. En basit yüklenen dosya gibi bir uygulama yapmaya çalışıyorum ve yüklenen dosya PHP'yi yüklemekten çoklu hedefleme.

Sunucudaki Schob zavantazhiti dosyaları. Her şeyden önce, bir dosya giriş alanı olan bir HTML formu oluşturmanız gerekir. Ardından, dosyayı belirtilen dizine taşıyacak bir PHP betiği ekleyin. PHP betiğinin yardımıyla sunucuya bir dosya yüklemek için aşağıdakini yazın:

  1. Basit bir HTML formu oluşturun: Bir dosya girebilmek için basit bir forma ihtiyacınız var. basic.php dosyasında bulunur:

Temel Dosya Yükleme

Temel Dosya Yükleme


Rehberlik, formun gerekli oluşturulması için daha fazla koddur. Bir dosya seçip Yükle düğmesine basar basmaz, basic.php dosyası bir basic.php dosyası olduğundan, form aynı taraftaki ek POST yöntemi için veri gönderecektir:

Önemli: Eklemeyi unutmayın enctype="multipart/form-data" y etiketi

.

  1. İstek formunu işlemek için bir PHP betiği oluşturalım. PHP'de indirilen dosyalar hakkındaki tüm bilgiler global $_FILES değişikliğinde saklanır. Böylece $_FILES kullanarak bir dosyanın yakalanıp yakalanmadığını kontrol edebilirsiniz. Bir yükleme dosyası olarak, onu move_uploaded_file PHP yardım işlevi için gerekli dizine taşıyabilirsiniz:

Rehberlik daha yüksektir, kod yeniden doğrulanır ve dosya koristuvach tarafından ele geçirilir. Dosya güvenli ise, dosyayı belirtilen dizine taşıyacağız. Fareyle üzerine gelinen komut dosyasında dosyayı, basic.php dosyasının bulunduğu klasöre taşıyoruz.

Tekrar indirildi PHP sürümü ekli yüklenen dosyayı taşıyın:

Temel Dosya Yükleme

Temel Dosya Yükleme


Lütfen bu PHP taşıma yüklenen dosya poposunu sunucuda test etmeyin. PHP'ye yardım için dosyaların nasıl alınacağını göstermek için özel olarak kreasyonlar oluşturmaz.

Soru: Kılavuz komut dosyası neden güvenli değil?
Öneri: Yukarıda belirtilen bir komut dosyası yardımı için herhangi bir dosyayı sunucuya yükleyebilirsiniz. Dolayısıyla, "canlı" bir sunucuda böyle bir görünümden bir komut dosyası kazanırsanız, o zaman bir bilgisayar korsanı olsun, PHP komut dosyalarının gücünü ele geçirebilir ve sitenizi ve sunucunuzu hackleyebilir.

Üç yıl sonra, sunucuya dosya yüklemek için bir komut dosyası yüklemekten bahsedeceğiz.

$_FILES nedir?

$_FILES - PHP'de global olarak $_POST veya $_GET olarak değiştirilmedi. HTTP POST yönteminin yardımı için dosyanın ekleri hakkındaki bilgilerin mevcut olduğu bir ilişkisel dizi vardır.

Bu nedenle, üzerine gelinen bir komut dosyası için print_r($_FILES) yönteminin bir yolu olarak aşağıdaki bilgileri alıyoruz:

Dizi ( => Dizi ( => upload-file-php.jpg => image/jpeg => /Applications/XAMPP/xamppfiles/temp/phpcQiYhh => 0 => 6887))

Cilt alanı için Tobto dizi bir öğe oluşturur. Ne yaparsın , öğenin adı da test olarak değiştirilecektir . Örneğin:

Dizi ( => Dizi ( => upload-file-php.jpg => image/jpeg => /Applications/XAMPP/xamppfiles/temp/phpcQiYhh => 0 => 6887))

Şimdi, yüklenen PHP dosyasını taşımak için taşınan dış görünüm girdi dosyası için beş öğe oluşturulur ( isim, tip, tmp_name, hata, boyut). Bu unsurlara daha yakından bakalım:

  1. isim: dosya tarafından yakalanan bir koristuvach'ın adının intikamını almak. abc.txt dosyasını tarayıcıda istiyorsanız, ad öğesi abc.txt olacaktır;
  2. type: tam olarak istenen dosyanın türü veya mime türü. İçin JPG dosyası Bu öğe, image/jpeg'in değeridir. Metni seçmek için eleman text/plain değerini alır. İçin farklı şekiller dosyalar farklı mime tipinde olacaktır. Fareyle en geniş mime türünün altına gelin:
  • JPEG: resim/jpeg;
  • PNG: resim/png;
  • Metin: metin/düz;
  • Kelime: uygulama/msword.
  1. tmp_name: özelleştirilmiş dosyanın günün saati listesi. php.ini dosyası tarafından belirtilen upload_tmp_dir'i değiştirerek bu yolu değiştirebilirsiniz.
  1. hata: af hakkında bilgi. Edinme sürecinde kullanılan af türünü ekleyin. Örneğin, dosya maksimuma genişletilirse veya dosya yakalanmazsa. Her ne af olursa olsun, є sayısal değeri bir sabittir. Aşağıya kaydırıldı tam liste pardon, yakі suçlanabilir PHP, yüklenen dosya uygulamasını taşı:
  • UPLOAD_ERR_OK (değer 0). Bu, dosyanın af olmadan başarıyla yakalandığı anlamına gelir;
  • UPLOAD_ERR_INI_SIZE (1 değeri). Dosyayı genişletme, php.ini dosyası için upload_max_filesize değiştirme talimatlarını değiştirme;
  • UPLOAD_ERR_FORM_SIZE (değer 2). Yüklü form MAX_FILE_SIZE değerini değiştirmek için dosyayı yeniden boyutlandırın;
  • UPLOAD_ERR_PARTIAL (değer 3). Dosyayı tekrar isteyin;
  • UPLOAD_ERR_NO_FILE (4 değeri). Yakalanacak dosya yok;
  • UPLOAD_ERR_NO_TMP_DIR (değer 6). Zaman tasarrufu için belirtilen dizinler mevcut değil;
  • UPLOAD_ERR_CANT_WRITE (değer 7). Dosya diske yazılamıyor.
  1. size: dosyanın bayt cinsinden boyutu.

move_uploaded_file nedir?

move_uploaded_file, yüklenen dosyayı zaman dizininden yüklenen klasöre taşımak için bir işlevdir. move_uploaded_file PHP dosyanın post HTTP yöntemine göre yüklenip yüklenmediğini kontrol eder.

Dosya başarıyla taşındıysa, true veya false öğesini reddedebilirsiniz. İlk uçta, bir sonraki kod satırını destekledik:

move_uploaded_file($_FILES["inputfile"]["tmp_name"], $destiation_dir)

Şimdi güzelce yapalım ve bilgileri gösterelim:

if(move_uploaded_file($_FILES["inputfile"]["tmp_name"], $destiation_dir))( echo "Dosya Yüklendi" ) else( echo "Dosya Yüklenmedi")

Alınabilecek dosyanın boyut sınırını değiştirme

Dosyaları yakalamak için dış görünüm formunda, boyuta bir sınır yüklemek gerekir, aksi takdirde önemli dosyaları yakalamak gerekir. PHP'yi hareket ettirerek yüklenen dosyaya yapıştırmanın iki yolu vardır:

  • PHP.ini dosyası, alınacak dosyaların maksimum boyutu için ayarlanan özel bir upload_max_filesize değişikliğine sahiptir. Dosyaların boyutunun 20 Mb ile sınırlı kalması için php.ini satırında ipuçları verdi: upload_max_filesize = 20M .
  • Matime dosyası nasıl alınır daha fazla genişleme, koristuvach pardon UPLOAD_ERR_INI_SIZE veya $_FILES değişikliğindeki "2" değerini kaldırır. upload_max_filesize değişiklik değerinin php.ini'de belirtilen post_max_size değişiklik değerini geçersiz kılabileceğini unutmamak önemlidir;
  • Yükleme formuna UPLOAD_ERR_INI_SIZE adlı bir ek giriş öğesi yerleştirerek yüklenecek dosyayı genişletebilirsiniz. Bunu şu şekilde yapabilirsiniz: .

Dosya boyutunu büyük ölçüde artırmanız gerekiyorsa, php komut dosyalarının saatini değiştirmeyi unutmayın.

Dosyaları indirmek için bir PHP betiği nasıl güvenli hale getirilir

Artık yatırım yapılan dosyaların genişletilmesini düzenleyebilirsiniz ve dosya türlerini nasıl belirleyeceğinizi, coristuvachi'ye nasıl yatırım yapacağınızı biliyorsunuz. PHP move ile yüklenen dosya popomuzun güvenliği hakkında konuşmanın zamanı geldi.

Bir popo olarak, kısa süreli öğrencilerin 1 MB'tan büyük jpeg dosyalarını yakalayamamaları için bunu yapmak mümkündür. upload_max_filesize değişikliğini php.ini dosyasına ayarlayın. Aşağıda betiğin kısaltılmış bir versiyonu bulunmaktadır:

Güvenli Dosya Yükleme

Güvenli Dosya Yükleme


PHP betiğine yardımcı olacak çoklu hedefleme dosyaları

$_FILES ve move_uploaded_file PHP yardımı için bazı dosyalar alabilirsiniz. Aşağıda, ek bir PHP betiği için dosyaları çoklu ele geçirmenin iki yolunu anlatacağım:

  1. Vykoristovuyuchi farklı isimler Girdi.
  2. Vikoristovuyuchi aynı im'ya girdi, ancak diziden alındı.

1. Vykoristovuyuchi farklı isimler Giriş:

Bir dosya çaçası, girdi öğelerinin vicorist çaçası ekleyebilirsiniz. Daha önce belirtildiği gibi, bir grup girdi öğesi oluşturursak, $_FILES bir grup temel öğe oluşturacaktır. Örneğin, aşağıdaki form için:

$_FILES şöyle bir diziyi temsil eder:

Dizi ( => Dizi ( => 20141002_094257.jpg => image/jpeg => /Applications/XAMPP/xamppfiles/temp/phpoBWrBZ => 0 => 2669096) => Dizi ( => 20141002_09> > /Applications/XAMPP/xamppfiles /temp/phpjwUmVZ => 0 => 2207657))

Aşağıdaki ipuçları, bir öznitelik öğesinin avatar (görüntü) ve diğerinin özgeçmiş için ( .doc formatında dosya):

Çoklu Dosya Yükleme

Çoklu Dosya Yükleme



PHP'de, genellikle sunucuya dosya yüklemeniz gerekir ... iyi, çünkü siteniz siteye dosya yükleyebilir: resimler veya başka metin dosyaları veya diğer formatlar ... bu yazıda fiyatlar hakkında konuşalım ...

Bu yüzden PHP yardımı için sunucuya dosya yüklemeyi öğrenmemiz gerekiyor. Ek yardım için böyle bir ilginin gerekli olduğunu bilmemiz gerekenler çok parçalı biçim, dosyayı yakalamak için özel bir alan varsa.




Böyle bir form için enctype parametresi olarak multipart/form-data değerinin belirtilmesi gerekir. POST yöntemini kullanan virüs.

PHP'de çok parçalı formlar nasıl işlenir

"Al" düğmesine bastıktan sonra, PHP dosyayı zaman dizinine yerleştirir ve dosyaya zaman adını atar (alınmış gibi görünüyor - aşağıda göreceksiniz). І hemen 4 farklı global dizi $_FILES yarattı:

  • $_FILES["uploadfile"]["name"]- Sunucuda yogo v_dpravki'ye dosya gönderiyorum (bu orijinal);
  • $_FILES["yükleme dosyası"]["boyut"]- Alınan dosyanın bayt cinsinden boyutu;
  • $_FILES["yükleme dosyası"]["tür"]- Alınan dosyanın MIME türü (tarayıcı bunu nasıl tanıyacaktır), örneğin: image/gif, image/png, image/jpeg, text/html;
  • $_FILES["uploadfile"]["tmp_name"]- dosya adını zaman dizininden silin, örneğin: /tmp/php57Opq2Y;
  • $_FILES["uploadfile"]["error"] - Bir saat boyunca yüklenen dosyayı suçlayabilmeniz için affın kodu. Anahtar ["hata"] PHP 4.2.0'a buv eklemeleri.

saygıyı iade et: robotik komut dosyasının tamamlanmasından sonra, dosya sunucuya yüklenir - zaman dosyası silinir, bu nedenle dosyayı zaman dizininden bir klasöre kopyalamak gerekir, örneğin ek işlevler için dosyalar kopyala(); Move() işlevini durdurmak gerekli değildir, çünkü kopyanın şu anda 2 sorunu vardır: zaman dosyası kendi başına görülür ve zaman dizini başka bir kullanıcıdaysa, bir af görürsünüz.

ipucu: süreç zihinsel olarak "Gönder" düğmesine basmaktan suçlu, o zaman ben ona basacağım: if($_POST["gönder"])(sonra bas)

$_FILES global dizisindeki 4 değişikliği gösteren bir resim:

Sanırım artık sizin için her şey netleşti, ne kullanıyorsunuz ve ne yaratıyorsunuz...

Komut dosyasının kendisi şöyle görünebilir:

if($_POST["gönder"])(
@mkdir("dosyalar", 0777); // bir klasör oluştur, değilse, af olmaz, hakları biz belirleriz

/*Eko"

";
print_r($_FILES);
Eko "
";*/
$uploaddir = "dosyalar/";
$uploadfile = $uploaddir.basename($_FILES["uploadfile"]["name"]);

if(kopyala($_FILES["uploadfile"]["tmp_name"], $uploadfile))(
Eko "

Dosya başarıyla sunucuya yüklendi

";
)Başka(
Eko "

Dosya sunucuya kaydedilemiyor

";
çıkış;
}

//Alım dosyasıyla ilgili veriler
Eko "

Sunucu dosyasına yapılan istekler hakkında bilgi:

";
Eko "

Yakalanan dosyanın orijinal adı: ".$_FILES["uploadfile"]["name"]."

";
Eko "

Büyülü dosyanın mim türü: ".$_FILES["uploadfile"]["type"]."

";
Eko "

Büyülü dosyanın bayt cinsinden boyutu: ".$_FILES["uploadfile"]["size"]."

";
Eko "

Timchasov im'ya dosyası: ".$_FILES["uploadfile"]["tmp_name"]."

";
}

Eksen böyle ve PHP kullanarak sunucuya bir dosya yükleme işlemi.

Ben spodіvayus, bulo korisno!

Son güncelleme: 1.11.2015

Sunucuya dosya yüklemek için enctype="multipart/form-data" parametresi ve $_FILES dizisi ile bir form oluşturmamız gerekiyor. Otzhe, hadi bir dosya oluşturalım upload.php bir araya gelmesiyle:

dosya eklentisi

Dosya Seç:

Form burada enctype="multipart/form-data" özniteliği ile tanımlanır. Form, bir dosya seçmek için özel bir alan içerir.

Yakalanacak tüm dosyalar bir ilişkisel diziye konur $_FILES. Hangi dosyaların dahil olduğunu belirlemek için if yapısını seçebilirsiniz: if ($_FILES)

$_FILES dizisi iki boyutludur. Dosyaları arayabilir ve name özniteliği ile aranan bir anahtarla bir dosyayı arayabiliriz.

Formdaki Oskіlki element zavantazhenna dosyası name="filename" olabilir, ardından dani dosyası$_FILES["filename"] yardımcısını kullanabiliriz.

Nesne dosyasının dış görünümü kendi parametrelerine sahip olabilir, bu nedenle şunları değiştirebiliriz:

    $_FILES["file"]["name"] : dosya adı

    $_FILES["file"]["type"] : dosya için yazın, ör. image/jpeg

    $_FILES["file"]["size"] : bayt cinsinden dosya boyutu

    $_FILES["file"]["tmp_name"] : sunucuya kaydedilen zaman dosyasının adı

    $_FILES["file"]["error"] : ücretin ödendiği saat için af kodu

Ayrıca, dolaşma saati için af görünümünü tersine çevirebiliriz. Herhangi bir affımız olmadığı için $_FILES["filename"]["error"] alanı UPLOAD_ERR_OK olarak ayarlanmıştır.

Dosya sunucuya yüklendiğinde, saat diliminde hareket etmeye başlayacak, bu yüzden yardım için move_uploaded_file() yapacağız, sunucu dizinine taşınacak.

move_uploaded_file() işlevi, yüklenen zaman dosyasının yolu ve yüklenen dosyanın yüklenmesi gereken yol için iki parametre kabul eder.

Obmezhennya ve nalashtuvannya

zamovchuvannyam genişletilmiş dosyalar için, scho zavantazhuyutsya, 2 mb. Ancak bu parametre yapılandırma dosyasında yapılandırılabilir. Bu ekranı örneğin 10 megabayta kadar değiştirin. Dosyayı kimin için biliyoruz php.ini sonraki satır:

Upload_max_filesize = 2M

hadi değiştirelim

Upload_max_filesize = 10M

Ayrıca ilgilendiğiniz zaman dosyaları için bir klasör oluşturabiliriz. Dosyalar kimin için php.ini sonraki satırı biliyoruz:

;upload_tmp_dir =

hadi değiştirelim

Upload_tmp_dir = "C:/php/upload"

Ayrıca php dizininde bir upload klasörü oluşturmamız gerekiyor.

çoklu görev

Komut dosyasını değiştir upload.php yani, pіdtrimuvav çarpanı zavantazhennya'da schob:

$hata) ( if ($hata == UPLOAD_ERR_OK) ( $tmp_name = $_FILES["uploads"]["tmp_name"][$key]; $name = $_FILES["uploads"]["name"][$ anahtar]; move_uploaded_file($tmp_name, "$name"); ) ) ) ?>

dosya eklentisi




Dosya seçme alanı name="uploads" özniteliğine sahipse, sunucu düzenlenen dosyaların koleksiyonunu tek bir dizi olarak görüntüler.

Foreach döngüsünü tekrar edelim, tüm dosyaları gözden geçirelim ve onları dizinden web sitesine götürelim.

Sunucuya (hosting) dosya yüklemenin mevcut hizmeti tüm sitelerde kaydedilir. sosyal önlemler, Doshkah goloshen, arkadaşlık siteleri ve içinde. Yoganın özü, bir web kaynağına dosyalarını (fotoğraflar, belgeler) İnternette yayınlama fırsatı vermektir.

verildiğinde bu servisє bir suttviy eksi. Sağ tarafta, sunucunuza dosya yüklemenize izin vermek için, gerekli herhangi bir kalıcı kontrol için kapılar kuracağız. Bu nedenle, bir dosya görüntüleyici yalnızca orijinal bilgilere değil, aynı zamanda kötü niyetli kişilere sunucunuzu ele geçirme fırsatı verebilecek bir virüs koduna da sahip olabilir. Bu eksi için dosyaların sunucuya yüklenmeden önce yeniden doğrulanması gerekir.

Ama sizi zalyakuvat etmeyeceğim, bunun yerine dosyaları sunucuya dönüştürmek ve yüklemek için hazır işlevinizi (PHP betiği) sunacağım. Fonksiyon %100 çalışıyor. Web sitelerimde kendim vicorist kullanıyorum. hangi işlev.jpg, .gif, .png formatındaki resim dosyaları (fotoğraflar) için bir istek olarak yazılmıştır. Ve hata için uyarlamak için değişiklikler yapabilirsiniz. PHP betiği ihtiyaçlarınıza göre.

PHP betiklerinin iki revizyonu vardır:

  1. barındırıcı, işgal edilen dosyanın boyutunu paylaştığı için (bu materyali yazarken, barındırmada 8 Mb'lık bir payım var), o zaman maksimum boyutun yeniden kontrol edilmesi gerekir;
  2. Dosya uzantısını yeniden kontrol etmek, indirmeden önce gerekli olmayan dosyaları eklemenize olanak tanır.

İşlev kodunun, dosyanın indirilen dosyadan sunucuya nasıl alınacağına dair yeterli açıklaması olduğundan eminim. Ale, yorumların memnuniyetinden yemek nasıl suçlanır.

Şimdi pratikte nasıl uygulanacağı hakkında

İşlevin PHP kodunu küçük bir dosyaya yerleştirin: function.php ve kök dizindeki sunucuya yerleştirin.

І içine fotoğraf çekmek için bir form yerleştirdiğimiz bir html dosyası oluşturuyoruz: index.html

upload.php - form işleyici dosyası
name="button" - düğmenin adı, düğmeye tıkladığınızda dosyayı sunucuya yükleme işlevi başlatılır

Kaç dosya indirilecek

Şimdi bir göz atalım, eğer sunucuda birkaç kez bir dosya parçası zavantazhit yapmak gerekirse.
Çalışmak ve bunları değiştirmek için neden function.php upload.php ve index.html dosyalarına ihtiyacımız var?





Belki de koristuvach dosyasını sunucuya (hosting) almak için hizmeti uygulamak için ihtiyacınız olan tek şey budur.

Grafik dosyalarının (fotoğrafların) karıştırılmasıyla yakından ilgili olan başka bir işlev, fotoğrafların boyutunu değiştirmek için aynı işlevdir:

Çok parçalı formlar

  • Listeye ekler eklemenize (eklemenize) izin veren ve sunucuya bir dosya yüklemeniz gereken ve ancak bundan sonra listeye ekleyebileceğiniz posta hizmetlerinin web arayüzleri;
  • Sunucuya dosya yükleme mekanizması olmadan kullanılamayan etkileşimli fotoğraf galerileri ve fotoğraf albümleri;
  • Diğer programların dosya alışverişi için vikoristovuyut gibi ücretsiz bir güvenlik yazılımının portalları, tıpkı bunun gibi.

Sunucuya dosya yükleme, yükleme alanında çok parçalı bir form yardımı için gönderilir. enctype parametresi olarak multipart/form-data değeri belirtilir:



Eksen, çok parçalı form sırasında yaklaşık olarak görünür (sunucuya küçük boyutlu bir dosya yükleyerek çok parçalı formların çalışmasının sonucunu görmeyi deneyebilirsiniz):

Çok Parçalı Form Ses iletim yöntemi POST. Ön popodan da görebileceğiniz gibi, bu formun iki alanı vardır:

  • Yükleme için dosya seçme alanı ;
  • Sunucudaki annenin hatası olduğu için dosyanın adını belirtmek için alan .

Çok parçalı formları işleme

İlk olarak, çok parçalı formu işlemek için komut dosyasını yazmadan önce devam edin, yapılandırma dosyasını düzenlemeniz gerekir. php.ini sunucuya dosya yüklemeye izin vermek için.

PHP php.ini yapılandırma dosyası, sunucuya yapılan dosya istekleriyle ilgili üç parametreye sahiptir:

  • file_uploads = Açık - dosyaların HTTP protokolünün arkasındaki sunucuya yüklenmesine izin verir;
  • upload_tmp_dir=/tmp – yüklenen dosyaların zamana dayalı yüklenmesi için bir dizin ayarlayın;
  • upload_max_filesize=2M - yüklenecek maksimum dosya sayısını ayarlayın.

Web sunucunuz Linux işletim sistemi altında çalışıyorsa hizmeti yeniden başlatmanız gerekir:

hizmet httpd yeniden başlat

PHP çok parçalı formları nasıl işler? Otrimav dosyasından sonra, onu upload_tmp_dir zamansal dizininden seçin ve dosyayı timpanik rank olarak seçin. $_FILES süper küresel dizisinde bazı değişiklikler yapalım. Bu dizi, edinme dosyası hakkında bilgi almak için.

Dosyaları yakalamak için tasarlanan değişiklikler PHP sürümünde ve akış yapılandırmasında yatmaktadır. $_FILES süper küresel dizisi PHP 4.1.0'da mevcuttur. register_globals yapılandırma yönergesi değerlere nasıl ayarlanır? üzerinde, dodatkovo, geçerli isimlerin değişmesiyle dile getirilecek. 4.2.0 sürümünden itibaren register_globals seçeneği için promosyon değerleri şöyledir: kapalı.

Popomuz için $_FILES dizisi yerine, aşağıda geziniyor. Dosya seçim alanı için uploadfile adının buraya aktarıldığını lütfen unutmayın, çok parçalı bir form seçmek mümkündür. Zrozumilo, im'ya alanlar olabilir ama yakim olabilir.

  • $_FILES["uploadfile"]["name"] - sunucuya yüklenmeden önceki dosyanın adı, örneğin, pict.gif;
  • $_FILES["uploadfile"]["size"] - alınan dosyanın bayt cinsinden boyutu;
  • $_FILES["uploadfile"]["type"] - Alınan dosyanın MIME türü (böylece tarayıcı bunu değiştirebilir), örneğin: image/gif, image/png, image/jpeg, text/html;
  • (Dosya yakalama alanını bu şekilde adlandırdık) - zaman dizinindeki dosyanın adını silin, örneğin: /tmp/phpV3b3qY;
  • $_FILES["yükleme dosyası"]["hata"] - Pardon kodu, yakalama saati için dosyayı nasıl kurtarabilirsiniz. Anahtar ["hata"] PHP 4.2.0'a buv eklemeleri. Doğru af kodları hakkında bilgi edinebilirsiniz.

Robot betiğinin tamamlanmasından sonra zaman dosyası silinecektir. Tse, robot komut dosyasının tamamlanmasından önce yogayı başka bir yere kopyalamaktan sorumlu olduğumuz anlamına gelir. Bu nedenle, sunucuya dosya yüklemek için komut dosyasıyla çalışma algoritması aşağıdaki gibidir:

"Gönder" düğmesine tıklandığında, dosya zaten sunucuya yüklenecek ve adı $_FILES["uploadfile"]["name"] olarak değiştirilecektir. Bu durumda, komut dosyası, dosyayı adlarla kopyalamaktan suçludur. $_FILES["uploadfile"]["tmp_name"] herhangi bir dizine (bu dizin için yazma izinleri gerektirir).

Bir dosyayı kopyalamak, işlev tarafından simgelenir kopyala() :

Parçalar, taşıma işlevi yerine copy() işlevinde ince ayar yapın:

  • Timchasovy dosyası otomatik olarak silinecektir;
  • Timchasovy kataloğu başka bir burunda bulunursa, af ile ilgili bir bildirim gösterilecektir.

Diyelim ki web sunucusunun kök dizininde (DocumentRoot dizininde) bulunan uploads dizinine bir dosya yüklememiz gerekiyor.

// Her türlü değişiklik için bir katalog oluşturalım. Yoga zaten yaratılmış gibi,
// affı umursamıyoruz, parçalar @ operatörü tarafından hızlandırılıyor:

@mkdir("yüklemeler", 0777);

// /tmp'den yüklemelere dosya kopyala
// Im'ya dosyası, sunucu güncellemesinden önceki gibi aynı olacak:

Copy($_FILES["uploadfile"]["tmp_name"],"uploads/".basename($_FILES["uploadfile"]["name"]));

Linux ile işler çok daha karmaşıktır - yükleme dizinine erişim haklarını güvence altına almamız gerekir. Bu sefer her şey için daha iyi, işlev mkdir() Endişelenmeyin, DocumentRoot dizinine yazma erişimimiz yok (örneğin /var/www/html veya /home/httpd/html). Sisteme root olarak kaydolun, uploads dizinini oluşturun ve master ve erişim haklarınızı şu sırayla değiştirin:

// upload dizini oluştur

// Apache ustasının ve o yoga grubunun adını yükleyin - apache tezh:

Chown apache:apache yüklemeleri

// Herkes için bölünmüş kayıt ayarı (777) + kapanış bitinin ayarlanması (1):

ayar 1777

Dosyayı genişletebilirsiniz, örneğin .htaccess dosyasını düzenleyebilir ve karşıya yükleme dizinine erişebilirsiniz - dizine erişebileceğiniz belirli dosyaları veya IP adreslerini belirtin.

Artık dosyaları sunucuya yükleyebilirsiniz.

Dosyaları sunucuya yüklemek için bir PHP betiği yazıyoruz


// Dosyayı kabul edebileceğimiz dizin:
$uploaddir = "./files/";
$yüklemedosyası=$yüklemedir. basename($_FILES["uploadfile"]["name"]);

// Zamana dayalı dosya kaydetme için bir dizinden bir dosya kopyalayın:
if (kopyala($_FILES["uploadfile"]["tmp_name"], $uploadfile))
{
Eko "

Dosya başarıyla sunucuya yüklendi

" ;
}
başka (yankı "

Bağışlamak! Sunucuya dosya yüklemek imkansız!

"
; çıkış; )

// Dosyanın ilgi alanları hakkındaki bilgileri göster:
Eko "

Sunucu dosyasına yapılan istekler hakkında bilgi:

"
;
Eko "

Sıkıştırılmış dosyanın orijinal adı: ".$ _FILES [ "yükleme dosyası" ][ "ad" ]. "

" ;
Eko "

Büyülü dosyanın mim türü: ".$_FILES [ "yükleme dosyası" ][ "tür" ]. "

" ;
Eko "

İşgal edilen dosyanın bayt cinsinden kapsamı: ".$_FILES [ "yükleme dosyası" ][ "boyut" ]. "

" ;
Eko "

Timchasov im'ya dosyası: ".$_FILES [ "yükleme dosyası" ][ "tmp_name" ]. "

" ;

?>

Bir dizi dosya yakalama uygulanabilir, örneğin vicorist, giriş etiketi için farklı ad değerleri.

Ayrıca, bir kerede meşgul olacak bir dizi dosya hakkında bir dizi bilgi organize edilmiş otomatik alma imkanı da aktarıldı. Bu yeteneği uygulamak için, bir HTML formundan bir diziyi düzenlemek için birden çok seçim ve onay kutusu alanıyla aynı sözdizimini kullanın:


qi dosyalarını yazın:






Görünüşe göre, böyle bir form düzeltildiğinden, $_FILES["userfile"] , $_FILES["userfile"]["name"] ve $_FILES["userfile"]["size"] dizileri başlatılacak ( PHP 4.1.0 ve önceki sürümler için $HTTP_POST_FILES gibi). register_globals yapılandırma yönergesi on olarak ayarlanırsa, ek genel değişiklikler başlatılır. Bu tür değişikliklerin dış görünümü, alınan dosyalar için bir dizi benzer değerle sayısal olarak endekslenecektir.

Diyelim ki /home/test/some.html ve /home/test/file.bin dosyaları alındı. Bu sefer $_FILES["userfile"]["name"], some.html değeriyle değiştirildi ve $_FILES["userfile"]["name"], file.bin değeriyle değiştirildi. Benzer şekilde, $_FILES["userfile"]["size"] öğesinin değiştirilmesi, some.html dosyasının boyutunu vb. düzeltecektir.

$_FILES["userfile"]["name"] öğesini değiştirin, $_FILES["kullanıcı dosyası"]["tmp_name"], $_FILES["userfile"]["size"] ve $_FILES["userfile"]["type"] da başlatılacaktır.

Visnovok:

Peki, dosyaların sunucuya yüklenmesini organize etmek o kadar kolay değil. Gerekli güvenlik seviyesini sağlamak için klasör, sunucudaki dosya parçalarının yakalanması, sunucuya saldırmak için kötü niyetli kişiler tarafından saldırıya uğrayabilir. Bunlar hakkında, gerekli güvenliğin nasıl sağlanacağı konusunda, pratsyyuchi'nin Yüklemeleri harika.



<<< Назад Zmist İleri >>>
Daha fazla yemek için bu mantıksız - rica ederiz.
televizyonlar