Расположение 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 ведет на другую директорию.