linux — Не получается создать файл на сервере через php + bash
если я попытаюсь исполнить скрипт из консоли все работает, а через веб-страницу нет
Первая причина — права на файлы.
ls -ld /etc/apache2/sites-available
выведет что-то похожее:
drwxr-xr-x 2 root root 4096 Oct 8 14:16 /etc/apache2/sites-available
Получается, что права на запись только у владельца (root
). Введите в консоли whoami
— скорее всего вы и есть root.
А через вебсервер php-скрипт запускается от имени другого пользователя и группы, это устанавливается в настройках /etc/apache2/apache2.conf
. Поищем эти настройки:
grep -P "User|Group" /etc/apache2/apache2.conf
Выведет:
User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP}
Поищем эти переменные:
grep -rP "APACHE_RUN_USER|APACHE_RUN_GROUP" /etc/apache2/
Выведет:
/etc/apache2/envvars:export APACHE_RUN_USER=www-data /etc/apache2/envvars:export APACHE_RUN_GROUP=www-data
Получается, что апач работает от имени www-data
и группы www-data
.
Чтобы разрешить доступ, нужно сменить владельца:
sudo chown www-data /etc/apache2/sites-available
либо где-то в конце /etc/apache2/apache2.conf
поменять
IncludeOptional sites-enabled/*.conf
на другой каталог, доступный для записи www-data
. Что делает a2ensite
? По сути, она делает симлинки из sites-available
в sites-enabled
, поэтому a2ensite
после такой перенастройки (смена IncludeOptional
) не обязательно выполнять.
Опция open_basedir дополнительно ограничивает PHP какими-то каталогами. Поискать можно так:
grep -r open_basedir /etc/apache2
У меня вывело:
/etc/apache2/sites-available/included.site.ru.conf: php_admin_value open_basedir "/home/pusher/www/site.ru:/home/pusher/www/mod-tmp:/tmp"
Получается, что когда Apache запускает скрипт сайта site.ru
, этот скрипт ограничен тремя перечисленными через :
каталогами.
Удалите open_basedir
или добавьте каталог /etc/apache2/sites-available
в эту настройку.
sudo a2ensite «$1».queryberry.ru.conf
sudo systemctl restart apache2
Пользователь www-data
, от имени которого запускается скрипт, скорее всего не имеет прав на запуск административных команд с помощью sudo.
Как настроить запуск sudo ...
без ввода пароля я подробно описал тут
Вам нужно запускать две команды: a2ensite
и systemctl
. Выполните:
sudo visudo
Затем необходимо вставить в конце следующее:
www-data ALL=(ALL) NOPASSWD: /usr/sbin/a2ensite www-data ALL=(ALL) NOPASSWD: /bin/systemctl
В данном случае спец. группу создавать не надо, мы просто даем доступ конкретному пользователю.
Делайте все поэтапно, смотря результат. Чтобы не запускать каждый раз php-скрипт и ломать голову, зайдите от имени апача и выполняйте аналогичные команды. Давайте зайдем под www-data
:
sudo su su www-data -s /bin/bash
вот так можно понять, что первый пункт работает:
cd /etc/apache2/sites-available touch site.ru # выведет это: touch: cannot touch ‘site.ru’: Permission denied
Ага. Не настроено.
sudo systemctl restart apache2 # выведет это: We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for www-data:
Ага. Требует пароль. Не настроено.
Ограничение open_basedir
можно проверить только через браузер.
PS. По сути, вы делаете свою реализацию давно решенной задачи по добавлению виртуальных хостов через веб-панель. Насколько безопасно вы это сделаете — зависит от вас. Если что, есть уже готовые решения: cPanel
, ISPmanager
и другие.
Что такое файл index.php? | Уроки PHP/MySQL программирования на сайте FructCode
5 years ago | 91.7K
В этой статье вы узнаете, что такое файл index.php, чем его можно открыть. Мы рассмотрим самый простой способ создания PHP файлов, а также напишем простую программу на языке PHP для файла index.php.
Файл index.php
Файл создаётся на языке программирования PHP – это скриптовый язык, на котором создаются динамические страницы сайта.
PHP – это простой и одновременно мощный язык программирования, на котором создавались такие крупные сайты как Facebook, Vkontakte с миллиардной посещаемостью.
Если вы совсем новичок в программировании, посмотрите уроки PHP программирования с нуля в курсе PHP/MySQL.
На языке PHP можно создавать не только сайты, но и CMS (система управления сайтами).
Данный файл, index.php имеет такое же предназначение, что и index. html, то есть может отвечать за отображение главной страницы, но также файл index.php может стать входящей точкой на ваш сайт, а далее, в зависимости от реализации вашей программной части, может передать управление другим файлам, например, выполнить инструкцию последовательной загрузки основных компонентов сайта: Роутинг, соединение с базой данных и прочее.
Кстати, читайте также статью о том какой язык программирования изучать первым?
Как создать файл index.php
Файл index.php создается аналогично, как и файл index.html. Можно создать файл index.php и в обычном стандартном блокноте операционной системы Windows.
1) Нажмите в папке правой кнопкой мыши в пустое поле открытой папки
2) Выберите создать, далее выберите Текстовый документ
3) Откройте созданный текстовый документ.
4) Выберите Файл — Сохранить как, укажите название файл index.php, а тип файла выберите Все файлы (*.*), как в видео ниже, затем нажмите сохранить.
youtube.com/embed/8va_Dqjvg0Y» frameborder=»0″ allowfullscreen=»allowfullscreen»>
Чем открыть файл index.php?
Для выполнения программы из файл index.php, этот файл необходимо поместить в специальный каталог, предварительно настроив веб-сервер. Самый простой способ настройки веб-сервера и выполнения программы из файла index.php, вы можете посмотреть в первом уроке PHP нашего курса по обучению PHP/MySQL веб-программированию для начинающих с нуля.
Файл index.php вы можете поместить в каждый каталог сайта, например, у вас может быть папка blog и в ней лежать файл index.php и при если вы в браузере наберете 127.0.0.1/blog/ без index.php, браузер откроет по умолчанию из каталога blog, файл index.php.
Простая программа для файла index.php
Код языка программирования PHP, помещается между специальными символами:
<?php // ЗДЕСЬ КОД PHP ?>
Создадим первую простейшую программу в файле index. php, которая будет складывать два числа и результат выводить в браузер. Для этого в файл index.php поместите следующий код:
<?php $a = 3; $b = 4; $c = $a + $b; echo $c; ?>
В результате выполнения программы, в браузере вы увидите результат суммы двух чисел — 7
Вы можете попробовать выполнить данный код файла index.php без установки дополнительных программ на компьютер, для этого перейдите на интерактивный урок PHP №6 из курса PHP/MySQL и допишите в виртуальный редактор кода echo $c, затем нажмите на значок обновить в правой части окна виртуального браузера. И вы увидите результат.
Выводы
Как вы видите, предназначение файла index.php очень простое.
Если вы хотите научиться создавать профессиональные сайты для себя или может быть хотите зарабатывать на этом деньги, причем очень не плохие, вы можете пройти наш полный шестимесячный курс Профессия веб-программист.
Успехов в обучении!
Есть ли способ прочитать «фактическую дату создания файла» с помощью PHP?
В настоящее время я делаю проект по программированию веб-сайтов с помощью PHP и mySQL.
Я просмотрел множество форумов по программированию и справочных веб-сайтов, хотя большинство из них только что представили использование filemtime()
и filectime()
. Я пробовал оба из них, и они возвращали только «время изменения файла» (время, когда файлы были загружены мной на сервер на этом этапе разработки).
Знание фактического времени создания файла очень важно для меня, потому что я буду использовать его для выполнения поиска по временной шкале позже, как требование проекта. Я застрял здесь. Очень ценю любую помощь и предложения.
Я использую «xampp» для веб-серверов и серверов баз данных (приложение имеет конфигурацию по умолчанию) и HTTP+PHP для внешнего интерфейса.
5
Когда пользователь загружает файл в веб-браузер, на самом деле происходит то, что к данным отправки формы добавляются три элемента информации:
- Имя файла (которое браузер будет основывать на имени, которое он имел в системе пользователя )
- Тип файла (который будет лучшим предположением браузера, обычно основанным только на имени файла)
- Двоичное содержимое файла
Даже если и на компьютере пользователя, и на вашем сервере где-то записана дата создания файла, она не будет передана при загрузке.
При построении любой веб-системы следует помнить об одной очень важной вещи: у вас есть только информация, предоставленная вам пользователем, и эта информация может быть намеренно или случайно ошибочной. Если бы была метка времени, она могла бы быть неправильной, потому что часы пользователя неверны; или он мог быть отправлен частью программного обеспечения, которое позволяло пользователю устанавливать его вручную.
1
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Требуется, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
vim — Как создать файлы php в папке /var/www?
спросил
Изменено 3 года назад
Просмотрено 64к раз
Я новичок в Ubuntu (Linux) и пытаюсь создать файл php в /var/www
, имя файла hello. php
. Я набираю vi hello.php
, а затем пишу свой код
, однако, когда я пытаюсь сохранить файл с помощью :wq
, я получаю сообщение об ошибке и файл с именем Hello.php не создается.
- vim
- vi
- ограниченный
3
Открыть /var/www/
cd /var/www/
Создайте файл
sudo touch hello.php
Откройте файл
sudo vi hello.php
Войдите в режим записи (мы были в командном режиме изначально) vi
чувствителен к регистру)
После этого нажмите Esc
(для перехода в командный режим) и введите :wq
. Проверьте, все ли в порядке с cat hello.php
.
Однако лучше использовать такие редакторы, как vim
или nano
, так как работать с ними намного проще.
1
Установите более удобный текстовый редактор со множеством дополнительных функций.
sudo apt-get установить vim
vim запускается из терминала.
Если вы установили HTML-сервер Apache (apache2), правильным местом для размещения вашего локального веб-сайта будет
/var/www/html/
. Здесь хранятся ваши php-файлы, чтобы вы могли получить к ним доступ из своего веб-браузера. Для получения дополнительной информации см.: Где разместить мой локальный веб-сайт, начиная с версии 2.4.7 apache2?.
2
Перейти в папку
root$: cd /var/www/html
создать файл sudo touch hello.php
проверьте свой файл в списке, набрав «ls»
root$:/var/www/html$ ls
отредактируйте файл и сохраните
root:/var/www/html$ sudo nano hello.