Сървър и файлова система

Предистория материали по основните програмни езици и оформление на сайтове.

Готов техника за създаване на прости и сложни динамични уебсайтове с PHP и MySQL.

разработване на уеб сайтове в "ключ".

Развитие на отделните фрагменти обекти, съвети за оформлението на уеб страници и уеб програмиране.

уеб инструмент

уеб магазин

Уеб услуги

Уеб графика

уеб ресурси

Сървър и файлова система

Искаш ли да сме в крак с развитието, което е на сайта? Регистрация за получаване на последните новини и статии.

Погледнете на Google

файловата система и сървър. Изтегляне на файлове. PHP-скрипт, който да работи с файлове

Сървър и файлова система

Представете си ситуация, в която клиентът трябва да осигури възможност за промяна на съдържанието на уеб сайта - например, най-актуалните новини за тяхната компания. Един от начините да направите това е да се даде възможност на клиента да изтеглите текстовия файл. След това тези файлове ще бъдат на разположение онлайн чрез маска, разработени в PHP.

За да направите това, ние трябва да разберем как файла качите на сървъра.

Качване на файлове

В PHP е достъпно много полезна функционалност - подкрепа за сваляне на файлове през HTTP протокол. Вместо да получи файл чрез HTTP протокол от сървъра към браузъра, ние ги изпрати в обратна посока, т.е. от браузъра до сървъра. Това обикновено се прилага HTML-форми. Формуляр, който ще използваме, както е показано.

Както се вижда на фигурата, формата съдържа поле за въвеждане където потребителят може да въведете името на файла, или чрез натискане на бутона "Преглед", за да изберете файлове, предлагани във вашата локална машина. Може би не сте виждали формата за качване на файлове. По-долу ще покажем как да го приложат.

След като въведете името на файла, потребителят може да кликнете върху "Изпращане на файла" и файлът е качен на сървъра, където се чака за PHP-скрипт.

За изпълнение на качване на файлове прилага някои HTML конструкции, специално предназначени за тази цел.

upload.html - HTML-формат за сваляне на файлове



Администрация - изтегляне на нови файлове





Качване на файл




Помислете за това специално форма.

  • В ЕВРОВОК
    трябва да зададете атрибут enctype = "съставното / формата-данни", за да обявления на сървъра, който заедно с обичайните форми на информация се изпраща и на файла.
  • Формулярът трябва да съдържа поле, което определя максималния размер за качване на файлове. Това скрито поле, и тя е представена от HTML-таг:

Името на полето на формуляра трябва да бъде MAX_FILE_SIZE. Неговата стойност е максималният размер (в байтове) на файлове позволени за качване. Тук той определя 100000 байта (1 MB). В нашата молба, можете да го направите по-малък или по-голям.
  • Формулярът трябва да съдържа полето за въвеждане с типа на файла, ние го определят, както следва:

    Име поле за въвеждане, можете да изберете някоя, ние просто трябва да го запомним, защото името ще бъде използвана в приемащата PHP-скрипт за достъп до файла.

  • Преди да продължим, трябва да се припомни, че в някои версии на дупки PHP сигурността, присъстващи в Кодекса за изтегляне. Ако решите да използвате мишката, за да си производство на сървъра, трябва да се уверите, че сте инсталирали последната версия на PHP, и следвайте освобождаването на ревизии и актуализации.

    Тя не трябва да бъде причина да се откаже такава полезна технология, но когато пишете код трябва да бъдат внимателни и да се опита да ограничи достъпа до всички, но администратора на мениджърите и съдържанието на сайта.

    Сценарият за файловете

    качване на файлове PHP код е много проста, но това зависи от настройките на PHP версия и конфигурация. Функционални имена и променливи варират от версия на версия, в зависимост от това дали настройката register_globals е включена. Кодът не изисква register_globals, но изисква impolzovaniya версия на PHP е не по-ниска от 4,1.

    при изтегляне на файл се поставя в мястото, запазено на уеб сървър за временни файлове. По подразбиране това е основната временната директория на уеб сървъра. Ако файлът не се преименува и да не се движат до края на сценария, тя ще бъде унищожена.

    Данните, които се обработват в нашите PHP скриптове, се съхраняват в свръхглобалните масиви $ _FILES. Ако е включена register_globals, данни е възможно и незабавен достъп чрез имената на променливите. Но тук, може би, това е мястото, където е по-добре, за да забраните register_globals и работа с данни чрез свръхглобална масив.

    Елементите в масива $ _FILES ще бъдат записани с маркер име на вашия HTML форма. Тъй като форма елемент има име потребителския файл, масив изглежда така:

    • Стойността се съхранява в $ _FILES [ 'потребителския файл'] [ 'tmp_name'], е мястото за съхранение на файла на уеб сървъра.
    • Стойността се съхранява в $ _FILES [ 'потребителския файл'] [ 'име'], е imnem файл в системата на потребителя.
    • Стойността се съхранява в $ _FILES [ 'потребителския файл'] [ 'размер'], показва размера на файла в байтове.
    • Стойността съхранява в $ _FILES [ 'потребителския файл "] [" тип "], съдържа файл MIME тип, например текст / обикновена или изображение / GIF.
    • Стойността се съхранява в $ _FILES [ 'потребителския файл'] [ 'грешка'], ще съдържа код за грешка, което е настъпило по време на изтегляне на файлове.

    Сега, когато знаем къде се намира той и за какво се нарича, можете да го копирате в по-полезно място. А временен файл в края на сценария ще бъде премахнат. Така че, ако искате да запишете файла, е необходимо да се движи или да преименувате.

    В нашия pimere Предполага се, че свалените файлове са новинарски статии, така че трябва да се премахнат от всички възможни HTML-тагове и да се премести в по-подходяща директория.

    upload.php - PHP-скрипт като получи досието от HTML-форми





    Зарежда.

    Повечето от сценария на проверките парчетата грешки. Качване на файл е свързано с потенциален риск от нарушаване на сигурността, и трябва да бъдат сведени до минимум този риск. Тя трябва да бъде колкото е възможно да се провери внимателно файла, за да се гарантира безопасността на своя дисплей на посетителя.

    Нека да видим какви са основната част от сценария, които съдържа.

    Първо, проверете кода за грешка се връща в $ _FILES [ 'потребителския файл'] [ 'грешка']. Всеки код за грешка отговаря специална постоянна. Възможни константи и техните значения са изброени по-долу:

    • UPLOAD_ERROR_OK - е 0, което означава, че не е имало грешки.
    • UPLOAD_ERR_INI_SIZE -ravna 1 означава, че размерът на файла надвишава максималната стойност е определена в директивата за файла php.ini up_load_max_filesize.
    • UPLOAD_ERR_FORM_SIZE -ravna 2 означава, че размерът на файла надвишава максималната стойност, посочена в HTML форма елемент MAX_FILE_SIZE.
    • UPLOAD_ERR_PARTIAL -ravna 3, което означава, че само част от файла изтеглен.
    • UPLOAD_ERR_NO_FILE -ravna 4, показва, че файлът не е заредена.

    След това проверете MIME-тип. В този случай, ние решихме, че ще изтегли само текстови файлове, така че MIME-тип се контролира чрез сравняване на $ _FILES [ 'потребителския файл "] [" тип "] с поредица от" текст / обикновен ". Тя проверява само за грешки, както и свързаните с безопасността не проверява. MIME-тип се определя от браузъра на потребителя въз основа на файловото разширение, а след това се изпраща до сървъра. Тъй като е лесно да се премине фалшива MIME-тип, атакуващите могат добре да се възползват от него.

    След това проверете дали файлът е наистина зарежда и не е локален файл, като например / и т.н. / ако съществува. Малко по-късно ще се върнем към този въпрос.

    Ако всичко върви добре, тогава ние да копирате файла в директория, предназначена за него. В този пример, директорията / качването /-он е извън уеб дървото и затова е подходяща за поставяне в своите файлове, които по-късно ще бъдат включени някъде.

    Тогава ние обработи файла, да изтриете от всичко произволен HTML и PHP-тагове използване strip_tags () функция и запис във файла обратно.

    Накрая съдържанието на файла се показва на потребителя, за да се гарантира, че файлът е зареден успешно.

    В резултат на успешното изпълнение на скрипта изглежда така:

    За да се уверите успешното приключване на файла за изтегляне и да се гарантира, че ние не се занимаваме с локални файлове, като например / и т.н. / ако съществува, е била приложена функция move_uploaded_file () и може да се използва is_uploaded_file ().

    Надраскани обувка скрипт може да позволи на посетителите с лоши намерения да се създаде временен файл с определено име и да получите скрипта да се справя толкова зает. И тъй като много стартиране скрипт връща на потребителя, за да копирате изтегления файл или да се постави на място, от което можете да изтеглите, потребителите имат възможност за достъп до всички налични файл за четене на уеб сървър. Сред тези файлове могат да бъдат файлове с поверителна информация - например / и т.н. / ако съществува или PHP код файл, който съдържа паролата за достъп до базата данни.

    Общи проблеми

    При изтегляне на файлове на сървъра, трябва да се вземат предвид няколко важни точки.

    • В предишния пример предполага съществуването на проверка на потребителски права за достъп. Не се позволява да качвате файлове на никого.
    • Ако позволите на качване на файлове на сървъра, без да провери права за достъп или потребители, които не са надеждни, има много основателни причини за безпокойство за съдържанието на тези файлове. Изтеглете и стартирайте скрипт, който може да бъде вредно - събитието е крайно нежелателно. Ето защо, трябва да се провери не само от вида и съдържанието на файла, тъй като в този пример, но също така и неговото име. Много добра идея - да възложи на свалените файлове "безопасни" имена.
    • Ако машината ви работи Windows, а след това по целия път до файла, вместо \ трябва да използвате \\ или /.
    • Използването на името на файла, въведена от потребителя, както е описано в сценарий, изпълнен с появата на различни проблеми. Най-очевидният от тях е свързан с риска от случайно презаписване съществуващи файлове със същото име. А по-малко очевиден проблем е, че различните операционни системи, а дори и с езиковите настройки могат да използват различни набори от символи в имената на файловете. Изтегления файл може да има име, което съдържа знаци, които не са валидни във вашата система.
    • Ако имате проблеми със стартирането на схемата, проверете файла php.ini. Тя трябва да съдържа upload_tmp_dir директива определя директорията, в която искате да осъществите достъп. За да изтеглите големи файлове може да се наложи да конфигурирате директива memory_limit, който определя максималния позволен размер на качените файлове. В Apache има и конфигуриране на изчакване и ограничава размера на сделката, която също трябва да се обърне внимание в случай на проблеми.
    • обсъждам