Размещение скриптов 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.phpPhp 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.phpPhp без сервера (запуск 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).