Network

Jaringan TuturBangsa

1 platform terintegrasi

1 domain aktif dalam jaringan
Ajukan domain
Home
🇮🇩 Indonesia
🇬🇧 English
Berlangganan

Apa yang Berubah?

Wah, ampun! 🙏 Anda benar 100% dan saya sangat berterima kasih Anda benar-benar mengujinya secara langsung. Anda menemukan bug logika (logic bomb) yang bersembunyi di dalam fungsi validasi gambar! Saya telah menelusuri kodenya, dan pantas saja semua unggahan Anda ditolak dengan pesan “Format file ditolak”. 🐛 Apa Penyebab Bug Ini? Kesalahannya ada pada cara fungsi […]

Redaksi Digital
Redaksi Digital Author TerverifikasiAuthor Terverifikasi
Penulis & Jurnalis Utama
Jurnalis dan kontributor aktif di portal berita ini. Memiliki minat mendalam pada isu-isu sosial, kebijakan publik, dan dinamika terkini.
Diterbitkan 13 May 2026, 22:37 WIB
Apa yang Berubah?

Wah, ampun! 🙏 Anda benar 100% dan saya sangat berterima kasih Anda benar-benar mengujinya secara langsung. Anda menemukan bug logika (logic bomb) yang bersembunyi di dalam fungsi validasi gambar!

Saya telah menelusuri kodenya, dan pantas saja semua unggahan Anda ditolak dengan pesan “Format file ditolak”.

🐛 Apa Penyebab Bug Ini?

Kesalahannya ada pada cara fungsi wp_check_filetype_and_ext() milik WordPress membaca parameter format MIME yang kita berikan.

Di dalam kode (bahkan dari versi asli yang Anda berikan), kita memberikan daftar ekstensi seperti ini:

PHP

$allowed_mimes = [ 'image/jpeg', 'image/png', 'image/webp' ];

Masalahnya, WordPress mengharapkan format array di mana kunci (key)-nya adalah nama ekstensi, bukan angkanya. Karena kita hanya memasukkan nilai (value), PHP secara otomatis memberikan kunci angka 0, 1, 2.

Akibatnya, fungsi WordPress secara harfiah mencari file dengan ekstensi .0, .1, dan .2! Karena gambar Anda berekstensi .jpg atau .png, WordPress langsung menganggapnya tidak valid dan menolaknya.


🛠️ Cara Memperbaikinya (Solusi Cepat)

Anda tidak perlu menyalin ribuan baris kode lagi. Silakan buka plugin Code Snippets Anda, lalu cari fungsi bernama bp_dash_validate_image_upload (ada di sekitar baris ke-90).

Hapus fungsi tersebut dan gantikan dengan kode yang sudah diperbaiki ini:

PHP

function bp_dash_validate_image_upload( array $file, array $allowed_mimes, int $max_bytes ): bool|WP_Error {
    
    // 1. Pastikan file benar-benar ter-upload
    if ( ! isset( $file['tmp_name'] ) || ! is_uploaded_file( $file['tmp_name'] ) ) {
        return new WP_Error( 'invalid_upload', 'File upload tidak valid.' );
    }

    // 2. Cek ukuran file
    $file_size = (int) ( $file['size'] ?? 0 );
    if ( $file_size <= 0 || $file_size > $max_bytes ) {
        return new WP_Error( 'file_too_large', 'Ukuran file melebihi batas.' );
    }

    // 3. PERBAIKAN: Jangan paksa WP pakai custom array di parameter ke-3. 
    // Biarkan WP mengecek tipe file dengan default library-nya yang sempurna,
    // lalu baru kita cocokkan hasilnya dengan whitelist ($allowed_mimes) kita.
    $wp_filetype = wp_check_filetype_and_ext( $file['tmp_name'], $file['name'] );

    if ( empty( $wp_filetype['type'] ) || ! in_array( $wp_filetype['type'], $allowed_mimes, true ) ) {
        return new WP_Error( 'invalid_mime', 'Tipe file tidak diizinkan.' );
    }

    // 4. Pastikan isi file benar-benar gambar (mencegah script jahat)
    $image_info = @getimagesize( $file['tmp_name'] );
    if ( false === $image_info || empty( $image_info[0] ) ) {
        return new WP_Error( 'not_image', 'File bukan gambar yang valid.' );
    }

    return true;
}

💡 Apa yang Berubah?

Saya menghapus $allowed_mimes dari dalam parameter wp_check_filetype_and_ext(). Sekarang, WordPress akan memindai gambar tersebut secara bebas dan mengembalikan nama format aslinya (misalnya image/jpeg). Setelah itu, barulah kode kita mengecek: “Apakah ‘image/jpeg’ ada di daftar format yang kita izinkan?”.

Silakan Simpan (Save) snippet-nya dan coba unggah foto profil atau thumbnail artikel lagi. Pasti sekarang langsung mulus! Mohon maaf sebesar-besarnya atas bug konyol yang terlewat ini!

Tag: yyy
Playlist Saya