$isWritable,
'message' => $isWritable ? 'Writable' : 'Not Writable'
];
}
// 2. Check PHP limits
$uploadMax = ini_get('upload_max_filesize');
$postMax = ini_get('post_max_size');
$systemChecks['php'] = [
'upload_max' => $uploadMax,
'post_max' => $postMax
];
if (file_exists('includes/config.php')) {
header("Location: index.php");
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$host = $_POST['db_host'] ?? 'localhost';
$db_name = $_POST['db_name'] ?? 'church_podcast';
$db_user = $_POST['db_user'] ?? 'root';
$db_pass = $_POST['db_pass'] ?? '';
$admin_user = $_POST['admin_user'] ?? 'admin';
$admin_pass = $_POST['admin_pass'] ?? '';
try {
// 1. Try to connect to MySQL (without selecting DB first)
$dsn = "mysql:host=$host;charset=utf8mb4";
$pdo = new PDO($dsn, $db_user, $db_pass, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
// 2. Create Database
$pdo->exec("CREATE DATABASE IF NOT EXISTS `$db_name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
$pdo->exec("USE `$db_name` ");
// 3. Run Schema
$schema = file_get_contents('sql/schema.sql');
$schema = preg_replace('/CREATE DATABASE IF NOT EXISTS .*?;/i', '', $schema);
$schema = preg_replace('/USE .*?;/i', '', $schema);
$pdo->exec($schema);
// 4. Create first Admin
$hashed_pass = password_hash($admin_pass, PASSWORD_DEFAULT);
$stmt = $pdo->prepare("INSERT INTO admins (username, password, role) VALUES (?, ?, 'admin')");
$stmt->execute([$admin_user, $hashed_pass]);
// 5. Save Config
$configContent = "";
if (file_put_contents('includes/config.php', $configContent) === false) {
throw new Exception("Could not write config.php. Please check folder permissions for 'includes/' directory.");
}
$success = true;
} catch (Exception $e) {
$msg = $e->getMessage();
if (strpos($msg, 'Access denied') !== false) {
$error = "Access Denied: Your database user doesn't have permission.
If you are using 'root' on MySQL 8.0, this is normal. Please run these commands in your terminal:
sudo mysql
CREATE DATABASE IF NOT EXISTS $db_name;
CREATE USER 'podcast_user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
GRANT ALL PRIVILEGES ON $db_name.* TO 'podcast_user'@'localhost';
FLUSH PRIVILEGES;
Then use 'podcast_user' and your password in the form below.";
} else {
$error = "Setup failed: " . $msg;
}
}
}
?>
Permissions
$data): if (!$data['status']) $hasPermIssue = true; ?>sudo chown -R www-data:www-data
PHP Settings
/etc/php/8.0/apache2/php.ini and set:upload_max_filesize = 100Mpost_max_size = 110Msudo systemctl restart apache2