smf error Fatal error: Uncaught Error: Call to undefined function idna_maps_not_std3() in C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Class-Punycode.php:537 Stack trace: #0 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Class-Punycode.php(280): Punycode->preprocess() #1 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Class-Punycode.php(148): Punycode->decode() #2 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Subs-Compat.php(493): Punycode->encode() #3 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Subs.php(8055): idn_to_ascii() #4 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Subs.php(6135): iri_to_url() #5 C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\ScheduledTasks.php(1151): fetch_web_data() #6 C:\inetpub\vhosts\junjao.com\httpdocs\board\install.php(1837): scheduled_fetchSMfiles() #7 C:\inetpub\vhosts\junjao.com\httpdocs\board\install.php(164): DeleteInstall() #8 {main} thrown in C:\inetpub\vhosts\junjao.com\httpdocs\board\Sources\Class-Punycode.php on line 537
แก้ไขอย่างไร
ข้อผิดพลาดนี้ใน **SMF (Simple Machines Forum)**
```
Fatal error: Uncaught Error: Call to undefined function idna_maps_not_std3()
```
หมายความว่า PHP ของเซิร์ฟเวอร์คุณ **ไม่มีฟังก์ชัน `idna_maps_not_std3()`** ซึ่งมาจาก **PHP extension ชื่อ intl (Internationalization extension)** — โดยเฉพาะ **ฟังก์ชันที่ใช้กับ IDN (Internationalized Domain Names)**
---
### 🔧 วิธีแก้ไขหลัก (แนะนำ)
ให้เปิดใช้งานหรือเปิดติดตั้ง **PHP intl extension**
#### ✅ ถ้าใช้ Windows Server (Plesk / IIS)
1. เข้าหน้า **Plesk** → ไปที่
**Tools & Settings → PHP Settings → PHP Extensions**
2. มองหา **intl** แล้วติ๊ก ✅ เปิดใช้งาน
3. หรือถ้าจัดการไฟล์ `php.ini` เอง ให้แก้ไฟล์:
```
extension=intl
```
(เอาเครื่องหมาย `;` ออกจากหน้า extension ถ้ามี)
4. จากนั้น **restart IIS หรือ Apache / PHP-FPM**
---
### 🧩 วิธีตรวจสอบว่าติดตั้งสำเร็จหรือไม่
สร้างไฟล์ชื่อ `phpinfo.php` ไว้ในโฟลเดอร์เว็บ (เช่น `httpdocs/board/phpinfo.php`)
ใส่โค้ด:
```php
<?php phpinfo(); ?>
```
เปิดในเว็บเบราว์เซอร์ เช่น
`https://www.junjao.com/board/phpinfo.php`
แล้วดูว่ามีส่วนหัว **intl** แสดงอยู่หรือไม่
ถ้ามี = ใช้งานได้แล้ว ✅
ถ้าไม่มี = extension ยังไม่เปิดใช้งาน ❌
---
### ⚙️ ทางแก้ชั่วคราว (ถ้ายังเปิด intl ไม่ได้)
บางเวอร์ชันของ SMF 2.1.x สามารถแก้ได้โดย **ปิดการใช้ IDN (Punycode)** ชั่วคราว:
1. เปิดไฟล์:
```
Sources/Subs-Compat.php
```
2. หาโค้ดที่มี `idn_to_ascii(` แล้วใส่เงื่อนไขครอบไว้แบบนี้:
```php
if (function_exists('idn_to_ascii'))
$domain = idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46);
else
$domain = $domain; // fallback ป้องกัน error
```
แต่วิธีนี้เป็นการ "ข้าม" การแปลงชื่อโดเมนสากลเท่านั้น ควรใช้ชั่วคราวเท่านั้น ⚠️
---
### 💡 สรุปสั้น ๆ
| สาเหตุ | วิธีแก้หลัก | วิธีชั่วคราว |
| -------------------------------------- | ---------------------------------- | ---------------------------------------------------- |
| PHP ไม่มีฟังก์ชัน idna_maps_not_std3() | เปิดหรือเพิ่ม PHP extension `intl` | แก้ไฟล์ Subs-Compat.php ให้ตรวจสอบ function_exists() |
---
ถ้าคุณบอกผมได้ว่า
* ใช้ **PHP version** อะไร (ดูจาก Plesk หรือ phpinfo)
* ใช้ **SMF version** อะไร (เช่น 2.1.3 หรือ 2.1.4)
----------------------------------