Размещение скриптов PHP в структуре веб сервера

Раздел: Администрирование сервера -> Настройка окружения

Основные варианты размещения PHP файлов

Основное эффективное решение: корневая директория веб сервера

Самый распространённый способ - поместить PHP файл в корневую папку, указанную в настройках веб сервера как DocumentRoot.

Для Apache на Linux это обычно /var/www/html/, на Windows (XAMPP) - C:\xampp\htdocs\. Для Nginx - /usr/share/nginx/html/ или /var/www/html/.

# Пример создания файла в корневой папке (Linux)
echo "<? phpinfo(); ?>" > /var/www/html/index.php

Php localhost 8000 (запуск php встроенного сервера на порту 8000)

После этого файл становится доступен по адресу http://localhost/index.php.

Типичные ошибки:

  • Ошибка 403 - недостаточно прав доступа к папке или файлу. Проверьте: chmod 644 /var/www/html/index.php и chmod 755 /var/www/html.
  • Ошибка 500 - синтаксическая ошибка в PHP. Проверьте файл через php -l index.php.
  • Файл не открывается - сервер PHP не установлен или не запущен. Проверьте командой systemctl status php-fpm (для Nginx) или systemctl status httpd (для Apache).

Как организовать структуру проекта в поддиректории?

Поместите файлы в подпапку внутри DocumentRoot, например /var/www/html/myproject/index.php. Доступ по URL: http://localhost/myproject/.

mkdir /var/www/html/myproject && echo '<? echo "Hello"; ?>' > /var/www/html/myproject/index.php

Php без сервера (запуск php без веб-сервера (cli))

Цель: разделение кода разных проектов, поддержка многомодульных приложений.

Возможные проблемы:

  • Некорректная обработка относительных путей - используйте __DIR__ или $_SERVER['DOCUMENT_ROOT'].
  • Файл .htaccess может конфликтовать с конфигурацией сервера.

Как защитить конфигурационные файлы от прямого доступа через браузер?

Разместите их за пределами DocumentRoot, например /var/www/includes/config.php. В этом случае файл нельзя открыть через URL, но его можно подключить из PHP-скрипта, находящегося в публичной зоне:

require_once '/var/www/includes/config.php';

где создать php (где создать php файл)

Цель: безопасное хранение паролей, ключей API, настроек БД.

Ошибки:

  • Путь указывается абсолютный - на разных серверах он может отличаться. Лучше использовать __DIR__ . '/../../includes/config.php'.
  • Если папка /var/www/includes не существует, возникнет фатальная ошибка.

Как запустить несколько сайтов на одном сервере с помощью виртуальных хостов?

Настройте отдельную корневую папку для каждого домена через конфигурацию Apache (VirtualHost) или Nginx (server block).

# Пример для Apache (httpd-vhosts.conf)
<VirtualHost *:80>
    DocumentRoot "/var/www/site1"
    ServerName site1.local
</VirtualHost>

где лог php (где находится лог php)

Создайте PHP файл /var/www/site1/index.php. Доступ по http://site1.local.

Цель: изоляция приложений, разные домены для разных клиентов.

Типичные ошибки:

  • Не добавлена запись в файл hosts или DNS.
  • Не перезагружен веб сервер после изменения конфигурации.
  • Ошибка 403 - не настроены права на новую папку DocumentRoot.

Как выполнять PHP скрипты из командной строки (CLI)?

Создайте файл в любом месте, например /usr/local/bin/script.php. Для удобства добавьте шебанг в начало файла:

#!/usr/bin/php
<?php
    echo "Скрипт запущен.\
";
?>

Php s localhost (запуск php сервера с localhost)

Сделайте файл исполняемым: chmod +x /usr/local/bin/script.php. Теперь можно запускать командой script.php.

Цель: автоматизация задач через cron, разовый импорт данных, тестирование.

Проблемы:

  • Путь к PHP может отличаться - проверьте which php. Если шебанг указан неверно, команда не сработает.
  • Файл должен быть в PATH или указывать полный путь.

Как загрузить PHP файл на удаленный сервер через FTP?

Используйте FTP клиент (FileZilla, WinSCP) или команду curl -T. Например:

curl -T index.php ftp://user:pass@example.com/public_html/

Файл окажется в папке public_html (часто это DocumentRoot на хостинге).

Цель: развертывание на продакшене, где нет прямого доступа к файловой системе.

Ошибки:

  • Неверные учетные данные - проверьте логин/пароль.
  • Пассивный режим FTP может блокироваться файрволом.
  • Права на загруженный файл могут быть 600 вместо 644 - измените через FTP или командой chmod после загрузки.

Расширенные примеры создания PHP файлов

1. Создание файла через heredoc в командной строке

Пример
cat > /var/www/html/script.php << 'EOF'
<?php
$db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $db->query('SELECT * FROM users');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'] . "\n";
}
?>
EOF
Файл /var/www/html/script.php создан с содержимым между строками 'EOF'

Пояснение: heredoc позволяет вставить многострочный код без экранирования кавычек.

2. Создание временного PHP файла средствами самого PHP

Пример
file_put_contents('/tmp/dynamic.php',
    '<?php return ["created" => time()]; ?>'
);
echo file_get_contents('/tmp/dynamic.php');
<?php return ["created" => 1690000000]; ?>

Пояснение: функция file_put_contents создаёт файл, если его нет. Применимо при автоматической генерации конфигов.

3. Использование include из родительской папки (вне DocumentRoot)

Пример
// В файле /var/www/html/index.php
require_once __DIR__ . '/../includes/db.php';
echo 'Подключение выполнено';
Подключение выполнено (при условии, что /var/www/includes/db.php существует)

Пояснение: __DIR__ указывает на текущую директорию скрипта. Символ .. поднимается на уровень выше DocumentRoot.

4. Создание PHP скрипта для CLI с аргументами

Пример
#!/usr/bin/php
<?php
if ($argc < 2) {
    echo "Использование: {$argv[0]} <имя>\n";
    exit(1);
}
echo "Привет, {$argv[1]}!\n";
?>

Запуск:

Пример
chmod +x /usr/local/bin/greet.php
/usr/local/bin/greet.php Сергей
Привет, Сергей!

Пояснение: $argc - количество аргументов, $argv - массив аргументов. Скрипт полезен для интерактивных задач.

5. Настройка Nginx для блокировки доступа к определённой папке

Пример
server {
    listen 80;
    server_name example.com;
    root /var/www/example;

    location /private {
        internal;  # доступ только изнутри (через include из PHP)
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    }
}

Создайте /var/www/example/private/config.php. Через URL он будет недоступен (404), но PHP сможет подключить его через require_once 'private/config.php'.

При попытке открыть http://example.com/private/config.php - 404 Not Found

Пояснение: директива internal запрещает прямой внешний запрос к файлам в данной локации.

6. Пакетное создание файлов с разными правами

Пример
for i in {1..5}; do
    echo "<?php // файл $i ?>" > /var/www/html/app/page${i}.php
    chmod 644 /var/www/html/app/page${i}.php
done
ls -la /var/www/html/app/
-rw-r--r--  1 user user 22 Jun 10 12:00 page1.php
-... (аналогично для page2.php-page5.php)

Пояснение: права 644 (владелец - чтение/запись, группа и остальные - только чтение) стандартны для PHP файлов.

7. Создание PHP файла с помощью echo в Windows (PowerShell)

Пример
echo "<? echo 'PowerShell test'; ?>" > C:\inetpub\wwwroot\test.php
Файл создан. При открытии http://localhost/test.php отображается 'PowerShell test'

Пояснение: символ > перенаправляет вывод в файл. Для длинных скриптов используйте многострочные строки (Here-String).

Где создать PHP файл - comments

En
где создать php (php)