# Masih error 500 — baca ini dulu

Saya belum bisa memastikan penyebabnya karena **error 500 tidak memberi pesan
apa pun** — dan pesan penjelasan yang saya buat sebelumnya ikut tertelan.

Paket ini memperbaiki itu: sekarang **tidak ada lagi layar 500 kosong**, dan ada
alat untuk menunjukkan error sebenarnya.

---

## Langkah (5 menit)

### 1. Upload & extract

Extract ZIP ini di folder **induk** — folder yang berisi `ducting/` dan
`plumbing/` (di servermu: root subdomain `wr.mydigitalapps.id`). Timpa file lama.

Setelah extract, di folder induk harus ada:

```
install.php
diagnosa.php        <- BARU
ducting/
plumbing/
```

Dan di dalam tiap aplikasi harus ada file baru `includes/boot.php` serta
`diagnosa.php`.

> **Cek dulu:** kalau setelah extract muncul folder seperti
> `ducting/ducting/` atau `WorkReport-MySQL-Gabungan-v2/`, berarti extract-nya
> masuk ke tempat yang salah. Hapus folder itu dan ulangi di folder induk.

### 2. Buka diagnosa.php

```
https://wr.mydigitalapps.id/diagnosa.php
```

Halaman ini **tidak memakai file aplikasi mana pun**, jadi tetap terbuka walau
aplikasinya error. Isinya:

1. Versi PHP & batas-batas server
2. Ekstensi PHP (pdo_mysql, gd, pdo_sqlite, dom, dll)
3. Semua lokasi `config.php` — mana yang valid, mana yang masih contoh
4. Tes koneksi MySQL + jumlah tabel & isi per aplikasi
5. **Kelengkapan file** — menandai file mana yang masih **versi LAMA** atau
   **HILANG**, lengkap dengan tanggal file
6. **Tes muat aplikasi** — klik tombol "Tes ducting", ini memuat file inti dan
   menampilkan **error persisnya** (pesan, file, baris)
7. **Catatan error terakhir dari server** (`error_log`) — di sinilah biasanya
   penyebab 500 tercatat lengkap

### 3. Kirimkan hasilnya ke saya

Screenshot bagian **5, 6, dan 7** sudah cukup untuk menunjukkan penyebab pastinya.
Kalau ternyata jelas (mis. "file versi LAMA"), tinggal ikuti sarannya.

---

## Yang berubah di paket ini

**Penangkap error fatal (`includes/boot.php`).** Dimuat paling awal oleh
`includes/functions.php`, jadi berlaku untuk **semua halaman** — termasuk
`create.php`, `detail.php`, `edit.php` dan file lain yang tidak ikut di paket.
Kalau terjadi error fatal, yang tampil adalah halaman keterangan berisi penyebab
+ detail teknis (pesan, file, baris) + tombol ke diagnosa — bukan "HTTP ERROR 500".

Sudah diuji dengan sengaja merusak file:

| Kerusakan yang disimulasikan | Hasil |
|---|---|
| `db.php` versi lama (fungsi belum ada) | HTTP 200 — "Ada file aplikasi yang versinya masih lama" |
| Parse error di `db.php` | HTTP 200 — "ParseError: Unclosed '{' on line 217" |
| `schema.php` hilang | HTTP 200 — "Ada file aplikasi yang hilang", + nama file & baris |
| Password MySQL salah | HTTP 200 — "Nama database, user, atau password tidak cocok" |

**`diagnosa.php`** — alat pemeriksa mandiri seperti dijelaskan di atas.

**Perbaikan kecil:** `db_config()` kembali memeriksa isi `config.php` sebelum
dipakai, supaya file config yang rusak tidak memicu error fatal.

---

## Kalau ingin coba tebakan tercepat lebih dulu

Dugaan terkuat saya: **file di server belum benar-benar tertimpa** — ZIP
sebelumnya ter-extract ke folder yang salah, sehingga `login.php` sudah versi
baru (memanggil `db_guard()`) tapi `includes/db.php` masih versi lama (belum
punya fungsi itu) → error fatal → 500.

Bagian **5 di diagnosa.php** akan langsung menjawab ini: tiap file ditandai
"versi BARU" atau "versi LAMA".
