Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Sxinar

Üstün
Katılım
1 Ocak 2024
Mesajlar
1.748
Makaleler
1
Çözümler
19
Beğeniler
1.774
Yer
Türkiye
Merhaba Flarum forumum var ve veritabanını sadece kullanıcılar olsa da olur. MyBB'ye taşımak istiyorum. Nasıl yapabilirim?
 
Son düzenleyen: Moderatör:
Çözüm
Bu işi yapan yazılımlara Importer deniliyor ama yapan bulamadım. Yapay zekaya özel kod yazdırman gerek gibi.
Merger sistem yazdım bir tane hocam ama şifre hash olarak farklı yöntemler kullandığı için şifreleri manuel olarak şifremi unuttum yapmaları gerekti.

PHP:
<?php
// Hata raporlamayı aç (sadece geliştirme ve test aşamasında kullanın)
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Script'in zaman aşımına uğramasını engelle
set_time_limit(0);

// --- VERİTABANI AYARLARI ---

// Flarum veritabanı bilgilerinizi buraya girin
$flarum_db = [
    'host' => 'localhost',
    'name' => 'flarum_veritabani_adi',
    'user' => 'flarum_kullanici_adi',
    'pass' => 'flarum_sifresi'
];

// MyBB veritabanı bilgilerinizi buraya girin
// Genellikle MyBB'nin inc/config.php dosyasında bulunur
$mybb_db = [
    'host' => 'localhost',
    'name' => 'mybb_veritabani_adi',
    'user' => 'mybb_kullanici_adi',
    'pass' => 'mybb_sifresi'
];


// --- GEÇİCİ ŞİFRE AYARI ---
// Tüm kullanıcılara atanacak olan geçici şifre.
// Taşıma sonrası kullanıcılar bu şifreyle giriş yapamaz, "Şifremi Unuttum" kullanmaları gerekir.
// Güvenlik için bu değeri karmaşık bir şey yapabilirsiniz, ancak kullanıcılar bunu bilmeyecek.
define('GECICI_SIFRE', 'CokGuvEnliGeciciSifre!2025');


// --- VERİTABANI BAĞLANTILARI (PDO) ---
try {
    $flarum_conn = new PDO("mysql:host={$flarum_db['host']};dbname={$flarum_db['name']};charset=utf8mb4", $flarum_db['user'], $flarum_db['pass']);
    $flarum_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $mybb_conn = new PDO("mysql:host={$mybb_db['host']};dbname={$mybb_db['name']};charset=utf8mb4", $mybb_db['user'], $mybb_db['pass']);
    $mybb_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı bağlantı hatası: " . $e->getMessage());
}

echo "<h1>Flarum'dan MyBB'ye Kullanıcı Taşıma Script'i</h1>";
echo "<p>Bağlantılar başarılı. Taşıma işlemi başlıyor...</p>";

$tasinan_kullanici_sayisi = 0;
$atlanan_kullanici_sayisi = 0;

try {
    // Flarum'dan tüm kullanıcıları çek
    $stmt = $flarum_conn->query("SELECT id, username, email, joined_at, last_seen_at FROM users ORDER BY id ASC");
    $flarum_users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($flarum_users as $user) {
        // Flarum'daki Yönetici (ID=1) genellikle MyBB'de zaten kuruludur.
        // Çakışmaları önlemek için ilk kullanıcıyı atlayabilir veya e-posta ile kontrol edebilirsiniz.
        if ($user['id'] == 1) {
            echo "Yönetici kullanıcı (ID: 1 - {$user['username']}) atlandı.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB'de bu email veya kullanıcı adı zaten var mı diye kontrol et
        $check_stmt = $mybb_conn->prepare("SELECT COUNT(*) FROM mybb_users WHERE username = ? OR email = ?");
        $check_stmt->execute([$user['username'], $user['email']]);
        if ($check_stmt->fetchColumn() > 0) {
            echo "Kullanıcı adı '{$user['username']}' veya e-posta '{$user['email']}' MyBB'de zaten mevcut. Atlanıyor.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB için yeni şifre oluşturma
        // 1. Salt oluştur (rastgele bir dize)
        $salt = bin2hex(random_bytes(4)); // 8 karakterlik salt
        // 2. Şifreyi MyBB formatında hash'le: md5(md5(salt) + md5(sifre))
        $hashed_password = md5(md5($salt) . md5(GECICI_SIFRE));

        // Kullanıcıyı MyBB veritabanına ekle
        $insert_user = $mybb_conn->prepare("
            INSERT INTO mybb_users
            (username, password, salt, email, regdate, lastactive, lastvisit, usergroup, displaygroup, loginkey)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
       
        $insert_user->execute([
            $user['username'],
            $hashed_password,
            $salt,
            $user['email'],
            strtotime($user['joined_at']), // Flarum tarihini Unix timestamp'e çevir
            strtotime($user['last_seen_at'] ?? 'now'), // Flarum'da null ise şimdiki zamanı kullan
            strtotime($user['joined_at']), // İlk ziyareti kayıt tarihi olarak ayarlayalım
            2, // Varsayılan "Registered" kullanıcı grubu ID'si
            0, // Görünen grup (0 ise usergroup kullanılır)
            bin2hex(random_bytes(25)) // Rastgele bir login key oluştur
        ]);

        echo "Kullanıcı '{$user['username']}' başarıyla taşındı.<br>";
        $tasinan_kullanici_sayisi++;
    }

} catch (PDOException $e) {
    die("<p style='color:red;'>Bir hata oluştu: " . $e->getMessage() . "</p>");
}

echo "<h2>Taşıma Tamamlandı!</h2>";
echo "<p style='color:green;'>Başarıyla taşınan kullanıcı sayısı: {$tasinan_kullanici_sayisi}</p>";
echo "<p style='color:orange;'>Atlanan (zaten mevcut veya yönetici) kullanıcı sayısı: {$atlanan_kullanici_sayisi}</p>";

?>

Böyle bir script yaptık sadece user tablosunu taşıyor açıklamaları da yazdım içine forum kök klasörüne "merge.php" olarak kaydedin ve dosyadaki flarum ve MyBB MySQL şifrenizi girin.
Taşıma başlasın.
Bu işi yapan yazılımlara Importer deniliyor ama yapan bulamadım. Yapay zekaya özel kod yazdırman gerek gibi.
Merger sistem yazdım bir tane hocam ama şifre hash olarak farklı yöntemler kullandığı için şifreleri manuel olarak şifremi unuttum yapmaları gerekti.

PHP:
<?php
// Hata raporlamayı aç (sadece geliştirme ve test aşamasında kullanın)
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Script'in zaman aşımına uğramasını engelle
set_time_limit(0);

// --- VERİTABANI AYARLARI ---

// Flarum veritabanı bilgilerinizi buraya girin
$flarum_db = [
    'host' => 'localhost',
    'name' => 'flarum_veritabani_adi',
    'user' => 'flarum_kullanici_adi',
    'pass' => 'flarum_sifresi'
];

// MyBB veritabanı bilgilerinizi buraya girin
// Genellikle MyBB'nin inc/config.php dosyasında bulunur
$mybb_db = [
    'host' => 'localhost',
    'name' => 'mybb_veritabani_adi',
    'user' => 'mybb_kullanici_adi',
    'pass' => 'mybb_sifresi'
];


// --- GEÇİCİ ŞİFRE AYARI ---
// Tüm kullanıcılara atanacak olan geçici şifre.
// Taşıma sonrası kullanıcılar bu şifreyle giriş yapamaz, "Şifremi Unuttum" kullanmaları gerekir.
// Güvenlik için bu değeri karmaşık bir şey yapabilirsiniz, ancak kullanıcılar bunu bilmeyecek.
define('GECICI_SIFRE', 'CokGuvEnliGeciciSifre!2025');


// --- VERİTABANI BAĞLANTILARI (PDO) ---
try {
    $flarum_conn = new PDO("mysql:host={$flarum_db['host']};dbname={$flarum_db['name']};charset=utf8mb4", $flarum_db['user'], $flarum_db['pass']);
    $flarum_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $mybb_conn = new PDO("mysql:host={$mybb_db['host']};dbname={$mybb_db['name']};charset=utf8mb4", $mybb_db['user'], $mybb_db['pass']);
    $mybb_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı bağlantı hatası: " . $e->getMessage());
}

echo "<h1>Flarum'dan MyBB'ye Kullanıcı Taşıma Script'i</h1>";
echo "<p>Bağlantılar başarılı. Taşıma işlemi başlıyor...</p>";

$tasinan_kullanici_sayisi = 0;
$atlanan_kullanici_sayisi = 0;

try {
    // Flarum'dan tüm kullanıcıları çek
    $stmt = $flarum_conn->query("SELECT id, username, email, joined_at, last_seen_at FROM users ORDER BY id ASC");
    $flarum_users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($flarum_users as $user) {
        // Flarum'daki Yönetici (ID=1) genellikle MyBB'de zaten kuruludur.
        // Çakışmaları önlemek için ilk kullanıcıyı atlayabilir veya e-posta ile kontrol edebilirsiniz.
        if ($user['id'] == 1) {
            echo "Yönetici kullanıcı (ID: 1 - {$user['username']}) atlandı.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB'de bu email veya kullanıcı adı zaten var mı diye kontrol et
        $check_stmt = $mybb_conn->prepare("SELECT COUNT(*) FROM mybb_users WHERE username = ? OR email = ?");
        $check_stmt->execute([$user['username'], $user['email']]);
        if ($check_stmt->fetchColumn() > 0) {
            echo "Kullanıcı adı '{$user['username']}' veya e-posta '{$user['email']}' MyBB'de zaten mevcut. Atlanıyor.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB için yeni şifre oluşturma
        // 1. Salt oluştur (rastgele bir dize)
        $salt = bin2hex(random_bytes(4)); // 8 karakterlik salt
        // 2. Şifreyi MyBB formatında hash'le: md5(md5(salt) + md5(sifre))
        $hashed_password = md5(md5($salt) . md5(GECICI_SIFRE));

        // Kullanıcıyı MyBB veritabanına ekle
        $insert_user = $mybb_conn->prepare("
            INSERT INTO mybb_users
            (username, password, salt, email, regdate, lastactive, lastvisit, usergroup, displaygroup, loginkey)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
       
        $insert_user->execute([
            $user['username'],
            $hashed_password,
            $salt,
            $user['email'],
            strtotime($user['joined_at']), // Flarum tarihini Unix timestamp'e çevir
            strtotime($user['last_seen_at'] ?? 'now'), // Flarum'da null ise şimdiki zamanı kullan
            strtotime($user['joined_at']), // İlk ziyareti kayıt tarihi olarak ayarlayalım
            2, // Varsayılan "Registered" kullanıcı grubu ID'si
            0, // Görünen grup (0 ise usergroup kullanılır)
            bin2hex(random_bytes(25)) // Rastgele bir login key oluştur
        ]);

        echo "Kullanıcı '{$user['username']}' başarıyla taşındı.<br>";
        $tasinan_kullanici_sayisi++;
    }

} catch (PDOException $e) {
    die("<p style='color:red;'>Bir hata oluştu: " . $e->getMessage() . "</p>");
}

echo "<h2>Taşıma Tamamlandı!</h2>";
echo "<p style='color:green;'>Başarıyla taşınan kullanıcı sayısı: {$tasinan_kullanici_sayisi}</p>";
echo "<p style='color:orange;'>Atlanan (zaten mevcut veya yönetici) kullanıcı sayısı: {$atlanan_kullanici_sayisi}</p>";

?>

Böyle bir script yaptık sadece user tablosunu taşıyor açıklamaları da yazdım içine forum kök klasörüne "merge.php" olarak kaydedin ve dosyadaki flarum ve MyBB MySQL şifrenizi girin.
Taşıma başlasın.
 
Son düzenleyen: Moderatör:
Çözüm
Merger sistem yazdım bir tane hocam ama şifre hash olarak farklı yöntemler kullandığı için şifreleri manuel olarak şifremi unuttum yapmaları gerekti.

PHP:
<?php
// Hata raporlamayı aç (sadece geliştirme ve test aşamasında kullanın)
ini_set('display_errors', 1);
error_reporting(E_ALL);

// Script'in zaman aşımına uğramasını engelle
set_time_limit(0);

// --- VERİTABANI AYARLARI ---

// Flarum veritabanı bilgilerinizi buraya girin
$flarum_db = [
    'host' => 'localhost',
    'name' => 'flarum_veritabani_adi',
    'user' => 'flarum_kullanici_adi',
    'pass' => 'flarum_sifresi'
];

// MyBB veritabanı bilgilerinizi buraya girin
// Genellikle MyBB'nin inc/config.php dosyasında bulunur
$mybb_db = [
    'host' => 'localhost',
    'name' => 'mybb_veritabani_adi',
    'user' => 'mybb_kullanici_adi',
    'pass' => 'mybb_sifresi'
];


// --- GEÇİCİ ŞİFRE AYARI ---
// Tüm kullanıcılara atanacak olan geçici şifre.
// Taşıma sonrası kullanıcılar bu şifreyle giriş yapamaz, "Şifremi Unuttum" kullanmaları gerekir.
// Güvenlik için bu değeri karmaşık bir şey yapabilirsiniz, ancak kullanıcılar bunu bilmeyecek.
define('GECICI_SIFRE', 'CokGuvEnliGeciciSifre!2025');


// --- VERİTABANI BAĞLANTILARI (PDO) ---
try {
    $flarum_conn = new PDO("mysql:host={$flarum_db['host']};dbname={$flarum_db['name']};charset=utf8mb4", $flarum_db['user'], $flarum_db['pass']);
    $flarum_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $mybb_conn = new PDO("mysql:host={$mybb_db['host']};dbname={$mybb_db['name']};charset=utf8mb4", $mybb_db['user'], $mybb_db['pass']);
    $mybb_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı bağlantı hatası: " . $e->getMessage());
}

echo "<h1>Flarum'dan MyBB'ye Kullanıcı Taşıma Script'i</h1>";
echo "<p>Bağlantılar başarılı. Taşıma işlemi başlıyor...</p>";

$tasinan_kullanici_sayisi = 0;
$atlanan_kullanici_sayisi = 0;

try {
    // Flarum'dan tüm kullanıcıları çek
    $stmt = $flarum_conn->query("SELECT id, username, email, joined_at, last_seen_at FROM users ORDER BY id ASC");
    $flarum_users = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($flarum_users as $user) {
        // Flarum'daki Yönetici (ID=1) genellikle MyBB'de zaten kuruludur.
        // Çakışmaları önlemek için ilk kullanıcıyı atlayabilir veya e-posta ile kontrol edebilirsiniz.
        if ($user['id'] == 1) {
            echo "Yönetici kullanıcı (ID: 1 - {$user['username']}) atlandı.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB'de bu email veya kullanıcı adı zaten var mı diye kontrol et
        $check_stmt = $mybb_conn->prepare("SELECT COUNT(*) FROM mybb_users WHERE username = ? OR email = ?");
        $check_stmt->execute([$user['username'], $user['email']]);
        if ($check_stmt->fetchColumn() > 0) {
            echo "Kullanıcı adı '{$user['username']}' veya e-posta '{$user['email']}' MyBB'de zaten mevcut. Atlanıyor.<br>";
            $atlanan_kullanici_sayisi++;
            continue;
        }

        // MyBB için yeni şifre oluşturma
        // 1. Salt oluştur (rastgele bir dize)
        $salt = bin2hex(random_bytes(4)); // 8 karakterlik salt
        // 2. Şifreyi MyBB formatında hash'le: md5(md5(salt) + md5(sifre))
        $hashed_password = md5(md5($salt) . md5(GECICI_SIFRE));

        // Kullanıcıyı MyBB veritabanına ekle
        $insert_user = $mybb_conn->prepare("
            INSERT INTO mybb_users
            (username, password, salt, email, regdate, lastactive, lastvisit, usergroup, displaygroup, loginkey)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ");
       
        $insert_user->execute([
            $user['username'],
            $hashed_password,
            $salt,
            $user['email'],
            strtotime($user['joined_at']), // Flarum tarihini Unix timestamp'e çevir
            strtotime($user['last_seen_at'] ?? 'now'), // Flarum'da null ise şimdiki zamanı kullan
            strtotime($user['joined_at']), // İlk ziyareti kayıt tarihi olarak ayarlayalım
            2, // Varsayılan "Registered" kullanıcı grubu ID'si
            0, // Görünen grup (0 ise usergroup kullanılır)
            bin2hex(random_bytes(25)) // Rastgele bir login key oluştur
        ]);

        echo "Kullanıcı '{$user['username']}' başarıyla taşındı.<br>";
        $tasinan_kullanici_sayisi++;
    }

} catch (PDOException $e) {
    die("<p style='color:red;'>Bir hata oluştu: " . $e->getMessage() . "</p>");
}

echo "<h2>Taşıma Tamamlandı!</h2>";
echo "<p style='color:green;'>Başarıyla taşınan kullanıcı sayısı: {$tasinan_kullanici_sayisi}</p>";
echo "<p style='color:orange;'>Atlanan (zaten mevcut veya yönetici) kullanıcı sayısı: {$atlanan_kullanici_sayisi}</p>";

?>

Böyle bir script yaptık sadece user tablosunu taşıyor açıklamaları da yazdım içine forum kök klasörüne "merge.php" olarak kaydedin ve dosyadaki flarum ve MyBB MySQL şifrenizi girin.
Taşıma başlasın.
Geçici şifre ataması. Hmm mantıklı. En merak ettiğim şey, BCRYPT ile şifreleyen scriptten MD5 gibi ilkel sisteme nasıl geçiş yapılacağı idi.
 
Geçici şifre ataması. Hmm mantıklı. En merak ettiğim şey, BCRYPT ile şifreleyen scriptten MD5 gibi ilkel sisteme nasıl geçiş yapılacağı idi.
Aynı şeyi düşündük o konuda gemini güzel bir fikir verdi.
Bu gayet mantıklı geldi tüm kullanıcılara geçici şifre atiyor ve şifre sıfırlamak isteyince otomatik bir şifre üretip gönderiyor mail ile.