Не работает PHP? Установка и настройка сервера для Windows

Не работает PHP? Установка и настройка сервера для Windows Хостинг
Содержание
  1. Так почему же не работает php-программа на бесплатном хостинге?
  2. Php: загрузка файлов методом post — manual
  3. Автоматическая загрузка файлов на сервер
  4. Загрузка нескольких файлов на сервер из формы
  5. Загрузка нескольких файлов одновременно
  6. Загрузка одного файла из веб-формы
  7. Зачем нам серверное пространство?
  8. Изменение атрибутов файлов на windows-хостинге с помощью командной строки
  9. Как поменять атрибуты файлов и папок в unix?
  10. Как изменить параметры php
  11. Как установить php на хостинг
  12. Лирическое отступление об атрибутах файлов в unix-системах
  13. Множественная загрузка файлов на сервер
  14. На хостинге linux
  15. На хостинге windows
  16. Настройка сервера
  17. Неверно настроен сервер для работы php
  18. Неправильный запуск файла php
  19. Несколько слов о коде
  20. Обработка ошибок при загрузке файлов
  21. Ошибки в программе php
  22. Получение свойств изображения.
  23. Примеры изменений настроек php
  24. Проверка на существующий файл с таким же именем
  25. Проверяем расширение загружаемого файла
  26. Проще не бывает!
  27. Результат
  28. Смена атрибутов на windows-хостинге
  29. Совершенствуемся
  30. Хранение файлов в базе данных mysql

Так почему же не работает php-программа на бесплатном хостинге?

Для корректной работы программы у неё должен быть выставлен признак «X» для всех уровней доступа. Кроме того, у папки, из которой вызывается программа также должны быть установлены разрешения на доступ к содержимому «X«. Кроме того, у владельца должны быть права на чтение и запись, а всем остальным достаточно только права на чтение.

Если вышеизложенные права записать по правилам UNIX-атрибутов, то мы получим «RWX R-X R-X» или 755. Именно эти атрибуты выставляются в приведённой иллюстрации.

Php: загрузка файлов методом post — manual

Данная возможность позволяет загружать как текстовые, так и
бинарные файлы. С помощью PHP-функций аутентификации и работы с
файлами вы имеете полный контроль над тем, кому разрешено
загружать файлы и что делать с файлом после его загрузки.

PHP способен получать загруженные файлы из любого браузера,
совместимого со стандартом RFC-1867.

Замечание:
Смежные замечания по конфигурации

Также ознакомьтесь с описанием директив file_uploads,
upload_max_filesize,
upload_tmp_dir,
post_max_size и
max_input_time конфигурационного
файла php.ini

Также следует заметить, что PHP поддерживает загрузку файлов методом PUT,
который используется в клиентах Netscape Composer
и W3C Amaya. Для получения
более детальной документации обратитесь к разделу
поддержка метода PUT.

Пример #1 Форма для загрузки файлов

Страница для загрузки файлов может быть реализована при помощи
специальной формы, которая выглядит примерно так:

В приведённом выше примере __URL__ необходимо заменить ссылкой
на PHP-скрипт.

Скрытое поле MAX_FILE_SIZE (значение
необходимо указывать в байтах) должно предшествовать полю
для выбора файла, и его значение является максимально
допустимым размером принимаемого файла в PHP.
Рекомендуется всегда использовать эту переменную, так как она
предотвращает тревожное ожидание пользователей при передаче
огромных файлов, только для того, чтобы узнать, что файл
слишком большой и передача фактически не состоялась.
Имейте в виду, что обойти это ограничение на стороне браузера достаточно
просто, следовательно, вы не должны полагаться на то, что
все файлы большего размера будут блокированы при помощи этой
возможности. Это по большей части удобная возможность для
пользователей клиентской части вашего приложения.
Однако настройки PHP (на сервере) касательно
максимального размера обойти невозможно.

Замечание:

Также следует убедиться, что форма загрузки имеет атрибут
enctype="multipart/form-data", в противном случае
загрузка файлов на сервер не произойдёт.

Глобальный массив $_FILES содержит всю информацию о загруженных файлах.
Его содержимое для нашего примера приводится ниже. Обратите внимание, что здесь предполагается
использование имени userfile для поля
выбора файла, как и в приведённом выше примере. На самом деле
имя поля может быть любым.

$_FILES[‘userfile’][‘name’]

Оригинальное имя файла на компьютере клиента.

$_FILES[‘userfile’][‘type’]

Mime-тип файла, в случае, если браузер предоставил такую
информацию. В качестве примера можно привести "image/gif". Этот
mime-тип не проверяется на стороне PHP, так что не полагайтесь
на его значение без проверки.

$_FILES[‘userfile’][‘size’]

Размер в байтах принятого файла.

$_FILES[‘userfile’][‘tmp_name’]

Временное имя, с которым принятый файл был сохранён на сервере.

$_FILES[‘userfile’][‘error’]

Код ошибки,
которая может возникнуть при загрузке файла.

$_FILES[‘userfile’][‘full_path’]

Полный путь, представленный браузером. Это значение не всегда содержит реальную структуру каталогов и ему нельзя доверять.
Доступно, начиная с PHP 8.1.0.

По умолчанию принятые файлы сохраняются на сервере в стандартной
временной папке до тех пор, пока не будет задана другая директория при
помощи директивы upload_tmp_dir
конфигурационного файла php.ini. Директорию сервера по умолчанию
можно сменить, установив переменную TMPDIR для
окружения, в котором выполняется PHP. Установка этой переменной при помощи
функции putenv() внутри PHP-скрипта работать
не будет. Эта переменная окружения также может использоваться для того,
чтобы удостовериться, что другие операции также работают с принятыми файлами.

PHP-скрипт, принимающий загруженный файл, должен реализовывать логику,
необходимую для определения дальнейших действий над принятым файлом.
Например, вы можете проверить переменную $_FILES[‘userfile’][‘size’],
чтобы отсечь слишком большие или слишком маленькие файлы. Также вы
можете использовать переменную $_FILES[‘userfile’][‘type’]
для исключения файлов, которые не удовлетворяют критерию касательно
типа файла, однако, принимайте во внимание, что это поле полностью
контролируется клиентом, используйте его только в качестве первой
из серии проверок. Также вы можете использовать
$_FILES[‘userfile’][‘error’] и
коды ошибок
при реализации вашей логики. Независимо от того, какую модель поведения
вы выбрали, вы должны удалить файл из временной папки или переместить его в
другую директорию.

В случае, если при отправке формы файл выбран не был, PHP установит
переменную $_FILES[‘userfile’][‘size’] значением 0, а переменную
$_FILES[‘userfile’][‘tmp_name’] — none.

По окончанию работы скрипта, если загруженный файл не был
переименован или перемещён, он будет автоматически удалён из временной папки.

Полоса прогресса загрузки файлов может быть реализована с помощью
«отслеживания прогресса загрузки файлов с помощью сессий«.

Автоматическая загрузка файлов на сервер

Не стоит забывать, что файлы на диске пользователя — конфиденциальная информация, к которой ни JavaScript,
ни уж тем более PHP не имеют ни малейшего отношения. До тех пор, пока пользователь сам не выбрал файл при помощи
<input type=»file»> ни о какой работе с ним не может идти и речи. И не забывайте, что у данного поля ввода
атрибут value защищен от записи.

Загрузка нескольких файлов на сервер из формы

Разберём механизм загрузки нескольких изображений за один раз с локальной машины пользователя. Продолжим дальше работать с $_FILES. Наша новая HTML-форма будет немного отличаться от старой.

Как видно в конец имени поля выбора файла name=»images[]» добавились фигурные скобки и атрибут multiple, который разрешает браузеру выбрать несколько файлов. Все файлы снова загрузятся во временную папку, если не будет никаких ошибок в php.ini.

// Изменим структуру $_FILES
foreach($_FILES['images'] as $key => $value) {
  foreach($value as $k => $v) {
    $_FILES['images'][$k][$key] = $v;
  }
  // Удалим старые ключи
  unset($_FILES['images'][$key]);
}

// Загружаем все картинки по порядку
foreach ($_FILES['images'] as $k => $v) {
  // Загружаем по одному файлу  
  $fileTmpName = $_FILES['images'][$k]['tmp_name'];  
  $errorCode = $_FILES['images'][$k]['error'];
	
	// Проверим на ошибки
	// ...

}

Мы реализовали механизм загрузки нескольких файлов на сервер. Весь код целиком лежит здесь .

Загрузка нескольких файлов одновременно

Пример формы загрузки нескольких файлов:

Загрузка одного файла из веб-формы

Описываем на примере загрузки аватара в профиль пользователя на форуме. Чтобы форма имела какой-нибудь «приличный» вид, я подключил css bootstrap используя cdn.Сама форма максимально простая, выглядит так:

Зачем нам серверное пространство?

Не думаю, что такой вопрос может возникнуть у кого-то. Но всякое бывает! Скажу только, что различные решения для загрузки чего-либо на серверное пространство востребованы в сфере сайтостроения. Благо, за примерами бегать далеко не надо.

Все мы являемся пользователями той или иной социалки. Паутинки этих «липких» сетей окутали, затронули всех и каждого. Чтобы загрузить в свой профиль фотки с отдыха, с семейного торжества и другие доказательства успешной жизни, используется загрузка файлов на сервер через PHP.

Кроме этого подобный функционал реализован и на обычных сайтах с поддержкой комментариев. Пользователю предоставляется возможность украсить свой аккаунт аватаркой, выделяющей его среди остальной аудитории. В общем, по всей Сети на серверное пространство грузят все и каждый.

Изменение атрибутов файлов на windows-хостинге с помощью командной строки

Подключаемся к файловой системе сервера с помощью клиента. Установка/снятие атрибутов производится с помощью команды ATTRIB. В команде применяются ключи [ R|-R][ A|-A][ H|-H][ S|-S] для установки или снятия соответствующих атрибутов, путь к файлу/папке (допускается маскирование), а также дополнительные ключи: [/S] — применить к папке и вложенным папкам, [/D] — обработка не только файлов, но и папок.

Примеры:

ATTRIB DEFAULT.HTML R H — приведёт к установке атрибутов Read only и Hidden файлу Default.html в текущей папке.

ATTRIB *.HTML -R -H -S /S — приведёт к сбросу атрибутов Read only, Hidden, System всем файлам с расширением *.html в текущей папке и во всех вложенных.

Как поменять атрибуты файлов и папок в unix?

С помощью любого SSH-клиента вы можете подключиться к файловой системе своего сервера и используя команду chmod выставить нужные атрибуты указанному файлу: «chmod 755 index.php«. Для большинства людей, малознакомых с работой с командной строкой, данный способ покажется, скорее всего, сложным.

Более лёгкий способ. Используйте для подключения к своему серверу любой FTP-клиент, например, FAR Manager (с его помощью и был сделан скриншот) или Total Commander. В таком случае вы будете перемещаться по файлам и папкам в более привычном и удобном интерфейсе.

Выставили атрибуты? Проверьте, заработало?:)

Уделим также внимание изменению атрибутов в Windows. Как ни удивительно, но подобные вопросы часто задаются.

Как изменить параметры php

Для каждой версии PHP можно установить свои параметры. Инструкция для изменения параметров PHP подходит, только если у вас есть услуга хостинга Linux. Можно ли сменить те или иные параметры PHP на хостинге Windows, вы можете уточнить в службе техподдержки.

Чтобы изменить настройки PHP, нужно установить на файл php.ini права 600 (rw——-) или 644 (rw-r—r—) и затем внести в него изменения.

Чтобы установить права и внести изменения, следуйте инструкции для вашей хостинг-панели:

Готово, изменения вступят в силу в течение минуты.

Как установить php на хостинг

Поддержка PHP присутствует на всех тарифных планах Hosting Linux и Hosting Windows, кроме тарифов Host-Lite и Win-Lite. Если у вас один из этих тарифов, повысьте тарифный план, чтобы включить поддержку PHP.

Лирическое отступление об атрибутах файлов в unix-системах

В UNIX-системах в отличие от Windows любая папка и файл имеет 3 права и 3 уровня доступа. Права по отношению к файлу могут быть:

  • R — право на чтение
  • W — право на запись
  • X — право на выполнение

Права по отношению к папке могут быть:

  • R — право на чтение данных из папки
  • W — право на запись данных в папку
  • X — право на вход в папку

В то же время различаются три уровня доступа:

  • U — владелец файла/папки
  • G — член группы владельца
  • O — все остальные пользователи или программы

Атрибуты файла/папки принято записывать одним из двух способов. Первый способ состоит в перечислении установленных или сброшенных атрибутов для каждого из уровней доступа. Если право есть, указывается «r«, «w» и «x«, если права нет, указывается «—«.

Пример: Разрешаем пользователю читать и записывать файл, всем остальным только читать: «RW- R— R—«.

Второй способ заключается в приведении трёх битовых триад к записи в восьмеричной системе счисления. Просто запомните, если вы не программист, что:

  • R4, если установлен, и 0, если сброшен
  • W2, если установлен, и 0, если сброшен
  • X1, если установлен, и 0, если сброшен

Триада запишется, как сумма значений «R» «W» «X«. Три триады прав для уровней доступа запишутся, как последовательные три числа.

Пример: Разрешаем пользователю читать и записывать файл, всем остальным только читать: «RW- R— R—«. Этот же пример в цифровой записи будет выглядить, как 644.

Множественная загрузка файлов на сервер

Добавим ещё одну форму в наш код.

На хостинге linux

В некоторых случаях вид строк может отличаться от указанных в примере. Чтобы корректно добавить строки, мы рекомендуем обратиться в техническую поддержку.

Готово, вы включили обработку PHP в HTML.

На хостинге windows

Перейдите в корневую папку сайта. Создайте файл с названием web.config или откройте его, если файл уже существует. Добавьте в файл следующие строки:

Готово, вы включили обработку PHP в HTML.

Настройка сервера

Я все сделал правильно, но у меня что-то не работает. Может, у меня неправильно сконфигурирован сервер?

Если Вы «все сделали правильно», но Ваш код неработает, или работает неправильно, не спешите отчаиваться.
Возможно проблема не в Ваших руках, а в неверных настройках сервера. Вот список директив, которые имеют отношения
к загрузке файлов:

В файле php.ini:

  • Если Вы хотите узнать, где расположен Ваш php.ini, выполните
    <?php phpinfo(); ?>
  • file_uploads — возможность запретить или разрешить загрузку файлов в целом. По умолчанию On.
  • upload_max_filesize — максимальный размер файла, который может быть загружен. Если Вам необходимо работать с большими файлами, измените эту настройку. По умолчанию 2М. Не забудьте изменить post_max_size.
  • post_max_size — общее ограничение сверху на размер данных, передаваемых в POST запросе. Если Вам необходимо работать с большими файлами, или передавать несколько файлов одновременно, измените эту настройку. Значение по умолчанию 8М.
  • upload_tmp_dir — временная директория на сервере, в которую будут помещаться все загружаемые файлы. Проверьте, какие на нее выставлены права(если на данном этапе у Вас возникли сложности, смотрите пояснения в конце статьи). Такая директория должна существовать и у пользователя, под которым выполняется Apache, также должны быть права на запись в эту директорию. Если Вы работаете с включенным ограничением open_basedir — то временный каталог должен находиться внутри. Вам не нужно заботиться о ее чистке или об уникальности имен, PHP решает эту проблему за Вас.

Неверно настроен сервер для работы php

Не работает PHP? Как исправить данную проблему? Вам нужно обратиться к документации о работе локального сервера или же обратиться к технической поддержке хостинга, который вы используете. Обращаю внимание на то, что на бесплатных хостингах очень редко предусмотрена возможность работы с PHP.

Итак, если вы используете локальный сервер (хостинг), то необходимо обратиться к настройкам Apache и php.ini. Если у вас вызывает это затруднение, то вы можете установить готовое решение для работы с PHP. Это, например, XAMPP. Процедуру установки и настройки я опишу ниже.

Неправильный запуск файла php

Многие пытаются запустить приложение на языке программирования PHP двойным щелчком мыши на файл, т.е. пытаются запустить его как HTML. Поэтому PHP не работает. Обращаю ваше внимание на то, что PHP это серверный язык программирования и для его работы вам потребуется как минимум наличие локального сервера (как его установить я описал выше в статье), а как максимум — использование платного или бесплатного хостинга.

Для запуска таких приложений используется адрес локального сервера, например localhost. Кстати говоря, в обоих вариантах и первом и втором при неправильном запуске приложения PHP вы увидите его код прямо в браузере. Это и означает, что у вас неверно настроен локальный сервер.

Несколько слов о коде

Теперь рассмотрим тонкости, как загрузить файл на сервер PHP. В теге формы обязательно нужно прописать enctype.

Чаще всего данный атрибут не указывается, но при пересылке файлов нам нужно отключить кодировку. Для этого используется значение multipart/form-data.

Чтобы получить доступ к полям формы, обращаемся к глобальному массиву $_FILES. Файлы не сразу загружаются в указанную папку. Первоначально они сохраняются во временной директории. Ее путь записан в значении элемента массива $_FILES[‘path’][‘tmp_name’]. Таким образом реализуется безопасная загрузка файлов на серверы PHP.

Для перемещения загруженного файла из временной директории в указанную папку используем move_uploaded_file(). Затем с помощью $_FILES выводим размер файла и его имя.

Обработка ошибок при загрузке файлов

Теперь вспомним об элементе массива по ключу error. Как мы помним, при отсутствии ошибок там будет 0. Во всех остальных случаях стоит уведомить пользователя об ошибках при загрузке файла. Если мы прочитаем вот эту страничку документации, то увидим, что ошибки на самом деле могут быть самыми разными.

Хороший код должен обрабатывать каждую из этих ошибок и выдавать соответствующую информацию пользователю. Мы же в учебном примере ограничимся только проверкой на 0, будет большим плюсом, если вы самостоятельно напишите обработку всех этих ошибок в своём коде. Итак, результат.

Ошибки в программе php

Не работает приложение PHP и отображается пустой экран? В этом случае вы, скорее всего, верно настроили PHP, но в вашем приложении имеются ошибки. Дело в том, что стандартные настройки PHP работают таким образом, что при возникновении ошибок отображается просто белый экран и приложение не запускается.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1); 

Этот код позволяет отображать все ошибки при работе приложения. Таким образом, вы сможете увидеть проблемы в работе скрипта и устранить их.

[banner_in_full_story_top_stat]

{banner_in_full_story_top_stat}

[/banner_in_full_story_top_stat]

В первую очередь для установки сервера Apache с преднастроенным PHP вам потребуется загрузить его с официального сайта по

Далее нужно выбрать, например, загрузку для Windows (см. рисунок).

XAMPPПосле загрузки исполняемого фала необходимо его запустить и следовать инструкциям по установке XAMPP.Установка XAMPP c PHP
Можно указать, какие модули нужно установить, а какие нет. Это зависит от потребностей в работе сервера XAMPP.Выбор параметров установки
Далее указываем место установки сервера. По умолчанию это диск C, папка xampp.Выбор места установкиОставляем или снимаем галочку для получения более подробной информации по Bitnami.Дополнительная информация по установке
Приступаем к установке Apache и PHP.Установка XAMPP с PHP
Установка XAMPP с PHP
Оставляем галочку для запуска контрольной панели и завершаем установку.
Завершение установкиПеред запуском контрольной панели будет запрошен ее язык, указываем, например, английский.Выбор языка контрольной панелиВ контрольной панели нужно нажать Start напротив Apache.Запуск сервера Apache c PHPПосле этого запустится сервер с работающим PHP. Для проверки работы нужно запустить любой браузер и в адресной строке прописать 

Получение свойств изображения.

Если перед вами возникла задача проверить тип или размеры картинки перед загрузкой файла на сервер,
вам потребуется функция getimagesize().
В качестве аргумента она принимает имя файла на диске и возвращает массив,
первые два элемента которого — ширина и высота соответственно, третий — тип изображения.
В случае невозможности прочитать из указанного файла корректное изображение, функция возвращает ложь.

Примеры изменений настроек php

Основные директивы для настройки файла php.ini описаны в статье Настройка файла php.ini.

Проверка на существующий файл с таким же именем

Первое, что приходит на ум – убедиться, что файл с таким именем не загружался ранее. Иначе мы рискуем перезатереть что-нибудь важное. Давайте проверим существование такого файла с помощью функции file_exists().

Проверяем расширение загружаемого файла

Ещё необходимо проверить то, что у загружаемого файла корректное расширение. Например, если мы хотим чтобы через форму загружали только картинки, то допустимыми расширениями для нас будут .jpg, .gif, .png.

Проще не бывает!

Любое программное решение можно «обвешать» стольким количеством дополнительного функционала, что порой автор и сам забывает, какая из функций программы является основной.

Но мы постараемся так не закапываться. Рассмотрим основы PHP загрузки файла на сервер на примере, который не «отяжелен» различными фичами. То есть это будет просто загрузчик.

Результат

В ходе данного урока получили скрипт следующего содержания.

Смена атрибутов на windows-хостинге

В операционной системе Windows файлы и папки могут иметь следующие основные атрибуты:

  • R — Read only (только чтение)
  • A —Archive (архивный)
  • H — Hidden (скрытый)
  • S —System (системный)

Для справки упомянем о дополнительных свойствах файлов и папок, которые зависят от платформы операционной системы, в обзоре мы их рассматривать не будем. Compressed, Encrypted, Not indexed, Sparse, Temporary, Offline, Reparse point, Virtual.

Некоторые атрибуты, как уже писалось, зависят от версии операционной системы, некоторые от файловой системы жёсткого диска (или RAID-массива). Например, атрибут Compressed (сжат) присутствует в файловой системе NTFS, а в файловой системе FAT16/FAT32 его просто нет.

Самый простой способ изменения атрибутов файла на Windows-хостинге. Подключаемся к площадке с помощью FTP-клиента (Far Manager, Total Commander, Windows Commander или аналогичного). Выделяем интересующие файлы/папки (клавиша Insert или клик правой кнопкой мышки).

Совершенствуемся

Немного усовершенствуем наш loader. Реализуем PHP загрузку нескольких файлов на серверное пространство:

Конечно, можно реализовать загрузку файлов на сервер с помощью PHP и Ajax, но тогда придется усложнять наш базовый пример. А этого нам не нужно :)

Хранение файлов в базе данных mysql

Если Вы собрались хранить загружаемы файлы в базе данных, Вам необходимо помнить следующие моменты:

Помните, что скрипт отображающий ваш HTML никак не связан со скриптом, который должен выводить изображение.
Это должны быть два различные приложения.

Хранение картинок в базе не является хорошем стилем. Гораздо удобней хранить в базе лишь пути к файлам изображений.

Оцените статью
Хостинги