Расположение PHP скриптов на сервере

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

PHP код располагается на сервере в файловой системе в директории, которая указана как корень документа (Document Root) веб сервера. Точное местоположение зависит от конфигурации сервера, типа хостинга и операционной системы. Администратору необходимо знать, где находятся файлы, чтобы настраивать окружение, изменять код или диагностировать ошибки.

Базовый способ: определение корневой директории через phpinfo()

Наиболее простой и надёжный способ для любого окружения, где запущен PHP, это создание скрипта, вызывающего функцию phpinfo().

<?php phpinfo(); ?>

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

После запуска этого скрипта через браузер в разделе "Server API" или "Apache Environment" находится поле "DOCUMENT_ROOT". Оно показывает абсолютный путь к корневой директории, где лежат PHP файлы.

Пример результата:

DOCUMENT_ROOT   /var/www/html

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

Если доступ к веб серверу есть только через SSH, используется командная строка. Команда:

php -r 'echo $_SERVER["DOCUMENT_ROOT"];'

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

Эта команда выведет корневой каталог, если PHP установлен и скрипт запускается в контексте веб запроса. В CLI контексте $_SERVER может быть не определён. Альтернатива - поиск через find:

find / -name 'index.php' -type f 2>/dev/null | head -n 5

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

Этот поиск покажет несколько первых файлов index.php, что часто указывает на корень.

Проблема:

Функция phpinfo() может быть отключена в целях безопасности (disabled). В таком случае можно создать скрипт, который выводит содержимое массива $_SERVER с помощью print_r:

<?php print_r($_SERVER); ?>

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

Или использовать отражение через ReflectionClass. На shared hosting обычно есть панель управления, где показан путь к корню сайта.

Как найти корень документа в Apache?

В Apache корневая директория задаётся директивой DocumentRoot в файле конфигурации. Для поиска конфигурации применяется команда:

grep -i 'documentroot' /etc/apache2/apache2.conf /etc/apache2/sites-enabled/*.conf 2>/dev/null | head -n 10

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

Если доступен apachectl, подходит команда:

apachectl -S | grep 'DocumentRoot'

Php mysql поддержка (поддержка mysql в php)

Вывод покажет все виртуальные хосты и их корневые каталоги.

Цель:

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

Проблема прав доступа:

Если файлы находятся вне DocumentRoot (например, символическая ссылка), фактический путь может отличаться. Проверка через readlink -f.

Как определить корень в Nginx?

В Nginx корневая директория задаётся директивой root внутри блока server. Команда для вывода всех конфигураций:

nginx -T 2>/dev/null | grep -E '^\s+root\s+' | head -n 10

Или быстрый поиск через grep по файлам /etc/nginx:

grep -r 'root' /etc/nginx/sites-enabled/ --include='*.conf' | head -n 10

Также работает скрипт phpinfo(), как описано в базовом способе.

Типичная ошибка:

Директива root может быть переопределена внутри location. Рекомендуется использовать nginx -T для полной картины.

Как найти путь к PHP файлам в Docker контейнере?

В Docker корневой каталог веб сервера задаётся в Dockerfile командой WORKDIR или COPY. Определение происходит через вход в контейнер:

docker exec -it <container_name> sh
pwd
ls

Либо используется docker inspect с фильтром Mounts:

docker inspect <container_name> --format='{{json .Mounts}}' | jq .

Пример вывода:

[{"Type":"bind","Source":"/home/user/project","Destination":"/var/www/html"}]

Это показывает, что локальная папка /home/user/project смонтирована в /var/www/html внутри контейнера. Значит PHP код находится в /home/user/project на хосте.

Проблема: отсутствие jq

Если jq не установлен, подходит команда docker inspect <container> | python3 -m json.tool или вход в контейнер с последующим realpath /var/www/html.

Как найти PHP файлы на shared хостинге?

На shared хостинге обычно есть панель управления (cPanel, ISPmanager и др.). В разделе "Файловый менеджер" отображается путь. Также можно создать скрипт phpinfo и посмотреть DOCUMENT_ROOT. Если нет доступа к SSH, вход через FTP клиент: корневая директория сайта называется public_html, www, htdocs и т.д. Чтобы узнать точный путь, создаётся файл info.php с кодом:

<?php echo __FILE__; ?>

При открытии в браузере выводится полный путь к файлу, который укажет на корень.

Проблема: множественные домены

Если на хостинге несколько сайтов, каждый имеет свою корневую папку. Рекомендуется использовать phpinfo для каждого домена.

Расширенные примеры для администраторов

Пример 1: Скрипт, выводящий все основные пути PHP.

Пример
<?php
echo "DOCUMENT_ROOT: " . $_SERVER['DOCUMENT_ROOT'] . "\n";
echo "SCRIPT_FILENAME: " . $_SERVER['SCRIPT_FILENAME'] . "\n";
echo "__FILE__: " . __FILE__ . "\n";
echo "__DIR__: " . __DIR__ . "\n";
echo "getcwd(): " . getcwd() . "\n";
?>

Результат выполнения (файл лежит в /var/www/html/test.php):

DOCUMENT_ROOT: /var/www/html
SCRIPT_FILENAME: /var/www/html/test.php
__FILE__: /var/www/html/test.php
__DIR__: /var/www/html
getcwd(): /var/www/html

Пример 2: Поиск DocumentRoot в Apache с помощью a2query (Debian/Ubuntu).

Пример
a2query -s | head -n 5
# или для всех сайтов
for site in /etc/apache2/sites-enabled/*.conf; do
  echo "=== $site ==="
  grep -i documentroot "$site"
done

Результат:

=== /etc/apache2/sites-enabled/000-default.conf ===
    DocumentRoot /var/www/html
=== /etc/apache2/sites-enabled/my-site.conf ===
    DocumentRoot /srv/www/my-site/public

Пример 3: Поиск root в Nginx с показом контекста.

Пример
nginx -T 2>/dev/null | grep -B5 'root /var/www'

Результат:

    server {
        listen 80;
        server_name example.com;
        root /var/www/example;
        index index.php index.html;
        ...
    }

Пример 4: Определение корня внутри Docker с помощью docker inspect.

Пример
docker inspect $(docker ps -q --filter name=php) --format='{{range .Mounts}}{{.Source}} -> {{.Destination}}{{"\n"}}{{end}}'

Результат:

/home/user/project -> /var/www/html

Пример 5: Использование find для поиска всех PHP файлов в корне.

Пример
find / -maxdepth 3 -name '*.php' -type f 2>/dev/null | head -20

Результат (пример):

/var/www/html/index.php
/var/www/html/config.php
/usr/share/php/PhpConsole.php
/usr/share/php/PhpConsole/Dispatcher/Debug.php

Пример 6: Использование realpath для разрешения символических ссылок.

Пример
ls -la /var/www/html
# если это ссылка
realpath /var/www/html

Результат:

/var/www/html -> /home/user/site
# после realpath:
/home/user/site

Пояснения. Первый пример помогает быстро увидеть все ключевые переменные окружения. Второй и третий примеры ориентированы на администраторов, работающих с конфигурацией Apache и Nginx. Четвертый пример особенно полезен при отладке Docker контейнеров. Пятый пример - универсальный способ поиска, но требует осторожности из-за глубины поиска. Шестой пример решает проблему символических ссылок, когда DocumentRoot ведет на другую директорию.

Где находится PHP код - comments

En
где php код (php)