=== start_install.php === false, 'message' => 'Пустой запрос']); exit; } // Жесткая очистка строк $clean_hostname = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', substr(trim($data['hostname']), 0, 16)); $clean_username = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', substr(trim($data['username']), 0, 16)); $clean_password = preg_replace('/[^a-zA-Z0-9_\-\.]/', '', substr(trim($data['password']), 0, 16)); // Пишем конфиг с нуля (всегда новые данные) // [Этот блок находится внутри api/start_install.php] // Формируем чистые строки конфигурации для Bash без скрытых символов \r $configContent = "SYS_LANG=" . trim($data['lang']) . "\n"; $configContent .= "SYS_LAYOUT=" . trim($data['layout']) . "\n"; $configContent .= "SYS_TIMEZONE=" . trim($data['timezone']) . "\n"; $configContent .= "SYS_HOSTNAME=" . $clean_hostname . "\n"; $configContent .= "DISK_MODE=" . trim($data['disk_mode']) . "\n"; // Жестко очищаем массив дисков от любых пробелов и переносов перед склейкой $clean_disks = array_map('trim', $data['disks']); $configContent .= "SELECTED_DISKS=" . implode(' ', $clean_disks) . "\n"; $configContent .= "SYS_USER=" . $clean_username . "\n"; $configContent .= "SYS_PASS=" . $clean_password . "\n"; $target_file = __DIR__ . '/install_config.txt'; // Перезаписываем файл актуальными данными if (file_put_contents($target_file, $configContent) !== false) { chmod($target_file, 0600); // Передаем управление ОДНОМУ управляющему скрипту exec('sudo /srv/http/installer/api/disk_prepare.sh >> /tmp/install.log 2>&1 &'); echo json_encode(['success' => true, 'message' => 'Установка успешно запущена.']); } else { echo json_encode(['success' => false, 'message' => 'Ошибка записи конфигурации']); } exit;