КомпјутериТипови на датотеки

PHP: file upload на серверот

Симнување на фајлови преку PHP - многу интересен случај, на кои мора да се пристапи многу внимателно. На интернет можете да најдете многу примери на спроведувањето на File Upload, но не сите од нив се добри и ги исполнуваат прописите за безбедност.

Таквите работи не треба да се донесе до заклучок, дури и ако тоа трае долго време. Ако се остави празнина во кодот, тогаш целиот сервер може да биде компромитиран.

безбедност

Со PHP фајл да испратите до серверот се врши многу лесно. Кодот е многу кратки и едноставни. Само неколку линии. Меѓутоа, овој метод е опасна. Многу повеќе време и линии на код далеку за безбедноста.

Опасноста е дека, ако не го сторат инспекции, било напаѓачот може да испратите своите сценарија на вашиот сервер. Во овој случај, тоа ќе има целосен пристап. Тој може да прави што сака:

  • бришење на базата на податоци;
  • бришење на датотеки сајтови;
  • менувате датотеките сајтови;
  • Стави го твојот оглас на вашиот вебсајт;
  • преземете вируси;
  • пренасочување на сите корисници на нивните веб-сајтови;
  • и многу други работи кои доаѓаат на ум напаѓачот.

Секогаш треба да се провери дека се обидува да ја преземете датотеката за корисникот. На пример, ако испраќате само слики, потребно е да се потврди дека датотеката е на сликата точно. Во спротивно, ќе преземете нешто.

Точно како да се спроведе проверка, тоа ќе биде прикажано, со сценариото директно испитување за да испратите фајлови.

Креирање на PHP форма

датотека форма испратите е многу едноставна. Недостасува копчиња на копчето прелистај и испратите.

Опишува како да се создаде форми нема, затоа што тоа е лесно. Понатамошни инструкции се претпостави дека веќе имаш основните концепти на HTML (во спротивно нема да се во потрага по информации за симнување на PHP).

Но, имајте во предвид дека податоците во форма што треба да додадете enctype атрибут.

Инаку, податоци за датотеката управувачот нема да се пренесе.

Како тоа треба да работат?

Кога ќе кликнете на копчето за пребарување треба да го видите кутија каде побарано да изберете датотека.

По што ќе треба да го добие на патот каде што се наоѓа на датотеката.

Ако на патот не се појави, го изврши дејството повторно.

По кликнување на управувачот за преземање на датотеки може да даде какви било информации.

На пример, можете да напишете линија која се наведува дека на датотеката е "толку и толку" името е успешно подигнати на "тој и тој" фолдерот. Се разбира, името на датотеката ќе биде даден секогаш различни.

Типично, оваа информација се користи за да debug код. Така можно е да се потврди дека податоците се пренесуваат и пишува се случи во саканиот именик. Тоа е, дури и името на датотеката не е наведено. Од оваа дополнителна информација што корисникот не треба.

Логично е да се излез името само ако корисникот преземања на повеќе датотеки. Таков е случајот, сметаат дека малку понатаму. Да не се понапред од нас самите.

прилагодување

Во PHP File Upload на серверот бара одредени подесувања, што треба да се направи во датотеката php.ini. Оваа податотека содржи голем број на подесувања. Тие сите ние не треба. Ние сме заинтересирани за три линии: file_uploads, upload_tmp_dir и upload_max_filesize.

Ве молиме имајте предвид дека овие поставувања ќе влијае на сите ваши сајтови на серверот, а не само некој. Затоа, за да го поставите на максималната големина врз основа на фактот дека ќе треба да се вчита корисници. Тоа не е препорачливо да поставите премногу голем.

Откако ќе се промени на вредностите во овие параметри, што треба да го рестартирате на серверот. Инаку поставувања нема да стапи на сила, како што тие го читаат за време на оптеретеноста на серверот.

Можете да го направите тоа во конзола со поврзување преку SSH до серверот. Едноставно внесете ја командата услуга httpd рестартирате, а потоа и на поставувања ќе имаат ефект.

Друг метод - рестарт преку ISP-панел или преку провајдер платежна панел.

низа датотека

Во PHP File Upload е направено од страна на низа $ _FILES. Таа ги содржи сите информации за датотеките што ги преземете.

За да ги видите информациите што се содржани во низа, што е доволно да се напише во управувачот датотеката следниве.

Изберете било која датотека и кликнете на "Внеси". На страницата со управувачот ќе се прикаже информации кои се чуваат во $ _FILES. Променливата е напишана целосно со големи букви. PHP - јазик чувствителен.

Како што можете да видите, во оваа низа има многу полиња. Сите од нив се важни за нас. Во првото поле содржи името на датотеката во формата во која што се користи на вашиот компјутер.

колоната за тип на одреден тип на датотека. Tmp_name поле одговара на името на привремена датотека. По завршувањето на сценариото ќе бидат избришани.

поле грешката содржи код за грешка. Ова беше малку подалеку. Големина - големината во бајти.

грешки

Врши преку испратите датотеката PHP е секогаш придружено со код за грешка. Порака за грешка влезе во "грешка". грешка на екранот е нула.

Сметаат дека вредноста на сите грешки:

Тоа беше речено погоре за параметар кој може да се наведени во вообичаените HTML.

Тука е форма на примерок за да ја преземете датотеката, што укажува на ограничување на износот на качената датотека.

PHP: file upload скрипта

Како што сите врши во пракса? Во PHP File Upload случува команда копија. Ако сте заинтересирани за прашањето за тоа како да ја преземете датотека, одговорот е едноставен копирање, кој користи два параметри - извор датотеката и датотеката дестинација.

Но, како што е наведено погоре, тоа не може да биде ограничено од безбедносни причини. На пример, проверете каков вид на фајл ние брод, може да се користи тип на поле во низа $ _FILES. Прво, ајде да се справи со инспекција, а потоа се движи кон целосна скрипта

Да речеме дека сакате да им овозможи на корисниците да испратите слика со резолуција од само GIF, JPEG или PNG. Укажуваат на тоа може да биде вака.

ако ($ _ датотеки [ 'file_upload'] [ 'тип']! = "image / gif") {
echo "Извинете, не можеме да поддржува само симнување Gif-Files";
излез;
}

Ако сакате да брод на сите 3 типа, едноставно додадете дополнителен услов за друг вид на сликата.

Копирање се прави вака: копија (слика 1, слика 2).

Во нашиот случај, кога работата е симнување од компјутер на серверот, можете да го стори тоа

копија ($ _ датотеки [ 'file_upload'] [ "tmp_name"] "1.jpg")

Тоа е, на датотеката ќе се копира со 1.jpg името. Ова не е сосема точно. Во овој случај, тоа е само еден пример. Името на датотеката е секогаш неопходно да се утврдат различни, и да го одредите продолжување, во зависност од датотеката.

Одредување на проширување може да биде на различни начини. Сето тоа зависи од инвеститорот на ерудиција. Една од најбрзо начини да (разлика од десетинки од секундата) утврди проширување - ова е следниот код.

$ PATH_INFO = pathinfo ($ _ датотеки [ 'photo1'] [ "name"]);

Ext $ = $ PATH_INFO [ 'продолжување'];

Променливата $ на лок на ние ќе ги чува саканиот продолжување. А името на датотеката може да се постави по случаен избор со користење на MD5. Ако планирате да преземете многу датотеки, тоа е подобро да ги пренесе на различни директориуми. Па тоа ќе биде поудобно. Особено, ако сакате да ја избришете.

за да ја преземете кодот ќе биде како што следува.

/// со слика

ако ($ _FILES [ 'photo1'] [ 'tmp_name'] == NULL)

{

ехо ( "

Непознат датотека.

назад ... и ");

излез;

}

///. да се каже за било кој проект на серверот е дозволено да се вчита на големи фајлови (видео), но има само слики, и корисниците треба да се ограничи

ако (($ _FILES [ "photo1"] [ "големина"]> 1024 * 1024 * 2)

{

?>

максимално дозволената големина на 2 MB

назад ... и

излез;

}

// креирате папки

// создаде папка во тековниот месец

if (! file_exists ( "img /." датум ( "М")))

{

mkdir ( "img /" датум ( "М").);

}

// создаде папка на тековниот ден

if (! file_exists ( "img /." датум ( "М"). "/". датум ( "Д")))

{

mkdir ( "img /" датум ( "М") "/" датум ( "Д") ...);

}

/// наставката на датотеката

$ PATH_INFO = pathinfo ($ _ датотеки [ 'photo1'] [ "name"]);

Ext $ = $ PATH_INFO [ 'продолжување'];

/// генерира датотеката

$ Id = MD5 (датум ( "YMd"));

ако (копија ($ _ датотеки [ 'photo1'] [ "tmp_name"] ", img /." датум ( "М"). "/". датум ( "Д"). "/". $ ид. $ лок) )

{

ехо ( "File успешно подигнати");

}

/// какви било понатамошни дејства (влез во базата на податоци, и така натаму. Н.)

}

повеќе датотеки

Качувањето на повеќе датотеки (PHP) се случува со помош на дополнителни полиња во форма.

Овој метод не е многу добра, како што го ограничува бројот на датотеки за преземање. Покрај тоа, се смета за лоша форма во програмирањето. Обидете се да се направи се што е динамичен.

Идеална опција - тоа е избор на голем број на датотеки одеднаш со притискање на едно копче.

Да го направите ова, се создаде форма како овој код.

<Форма метод = акција "пост" = "Врска до поднесе управувачот" име = "upload_form" enctype = "повеќе делови / форма-податоци">

<Внесете class = типот "form_upload" = "датотека" име = "file1 []" повеќе вредност = "Преглед">

<Внесете class = типот "form_upload" = "поднесе" име = "upldFile" вредност = "Додади" />

Имајте на ум дека повеќе додавање на зборот, а името е дадено како низа []. Во овој случај, $ _FILES низа ќе биде малку поинаква. Вие ќе добиете низа на низата.

За да ја тестирате повторно може да го користат var_dump ($ _ датотеки);

Сите на вашите датотеки ќе бидат поставени во низа вака:

  1. $ _FILES [ "file1"] [ "name"] [0]
  2. $ _FILES [ "file1"] [ "name"] [1]
  3. И така натаму.

Во загради е напишано досие број во низа. Сметајќи од нула. Ние ги третираат на ист начин, само прашајте циклусот и се јавите на погоре опишаната кодот на крајот на индексот додавајќи [$ i].

$ I = 0;

додека ($ _FILES [ "file1"] [ "name"] [$ i] <> '')

{

/// ставете кодот погоре

}

Така, ќе треба да се случи преку PHP фајл да испратите до серверот во еден циклус, без непотребно повторување на кодот, како што е обично случај, ако се користи верзијата со статичен број на датотеки (последната слика).

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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