Goalni
Новичок
Здравствуйте.
У меня есть деплой скрипт, который вытягивает проект из системы контроля версии, заливает на продакшен и развёртывает его там.
Развёртывание заключается в простой замене папок со скриптами командой mv.
Проблема в том, что замена папок влияет на текущую рабочую директорию скриптов, которые работали в момент замены.
Ситуация воспроизводима:
Если во время вызова sleep() переместить папку со скриптом в другое место, то вывод будет следующим:
Причём если перемещать сам скрипт, то смена рабочей директории не происходит.
Это поведение контринтуитивно и приводит к ошибкам непосредственно в момент деплоя. Проект повсеместно использует относительные пути и смена рабочей директории делает эти пути бессмысленными и входящими в конфликт с open_basedir.
Я не нашел в документации описание подобной багофичи. Может быть кто-то сталкивался с подобным?
Версия PHP 5.5.17. Смена cwd подтверждена в cli и fpm окружениях.
У меня есть деплой скрипт, который вытягивает проект из системы контроля версии, заливает на продакшен и развёртывает его там.
Развёртывание заключается в простой замене папок со скриптами командой mv.
Код:
mv /var/www/project /var/deploy/project_old
mv /var/deploy/project_new /var/www/project
Ситуация воспроизводима:
PHP:
<?php
function go() {
var_dump(getcwd(), file_exists('hello'));
}
go();
sleep(10);
go();
Код:
string(16) "/home/lalala/bbb"
bool(true)
string(8) "/tmp/ccc"
bool(false)
Это поведение контринтуитивно и приводит к ошибкам непосредственно в момент деплоя. Проект повсеместно использует относительные пути и смена рабочей директории делает эти пути бессмысленными и входящими в конфликт с open_basedir.
Я не нашел в документации описание подобной багофичи. Может быть кто-то сталкивался с подобным?
Версия PHP 5.5.17. Смена cwd подтверждена в cli и fpm окружениях.