window.addEventListener('beforeunload', sendRequestOnCloseTab, false);

function sendRequestOnCloseTab() {
    if (!navigator.sendBeacon) {
        return;
    }

    navigator.sendBeacon(
        '/api/method',
        JSON.stringify(
            {
                field: 'value'
            }
        )
    );
}

Отправка запроса с помощью Beacon API не ожидает ответа сервера, а поэтому не блокирует страницу.

Если функция exec возвращает ошибку при выполнении консольной команды, которая успешно работает в cmd.exe, то нужно проверить переменную окружения PATH, которая используется в php. И если в PATH нет пути к необходимой команде, то нужно добавить его.

Например, если не работает команда git, и в getenv('PATH') нет пути к ней, то нужно добавить путь в PATH:

Прямо в скрипте:

$envPath = getenv('PATH');
$envPath .= ';c:\Program Files\Git\bin';
putenv('PATH=' . $envPath);

Либо в файле php.ini в директиве include_path.

Страницы