# cPanel IPTV güncellemesi

Bu güncelleme mevcut yönetim paneline **IPTV → kategori → kanal** klasör yapısını ekler. Bağlantıdan M3U alma veya dosyadan yükleme, tekrarları önleyerek içe aktarma ve kısa proxy adresleriyle `IPTV.m3u` indirme vardır. Yeni Node.js/Composer servisi gerekmez; mevcut PHP 8.3 + cURL ortamında çalışır.

## Yükleme

1. Önce cPanel File Manager ile mevcut `admin.php`, `series_converter.php`, `.htaccess` ve özellikle `config.json` dosyanızın güvenli yedeğini alın. Yedekleri herkese açık web klasöründe bırakmayın.
2. Güncelleme ZIP'indeki **admin.php, series_converter.php, config_store.php ve iptv.php** dosyalarını mevcut `proxy.php` ve `config.json` dosyalarının olduğu klasöre yükleyin. `config_store.php` artık iki eski panel dosyasının da bağımlılığıdır; dosyaları birlikte yükleyin. Mevcut `proxy.php` kullanılır, bu güncellemede değiştirilmedi.
3. ZIP'teki **htaccess-iptv.txt** içindeki koruma bloğunu mevcut `.htaccess` dosyanızın sonuna ekleyin. Sunucunuzdaki cPanel PHP handler satırlarını değiştirmeyin. Bu blok `config.json`, kilit ve geçici kayıt dosyalarının HTTP üzerinden indirilmesini engeller.
4. HTTPS kullanın. Tarayıcıda `https://SITENIZ/KLASOR/config.json` adresini açınca **403** dönmesini doğrulayın. JSON görüntüleniyorsa kaynağınızı içe aktarmadan önce hosting sağlayıcısından korumayı düzeltmesini isteyin. Nginx'in Apache'den önce statik JSON sunması halinde `.htaccess` yeterli olmayabilir.
5. Panelden giriş yapın, **IPTV / M3U İçe Aktar** düğmesine basın. Yetkili kaynak bağlantınızı **M3U bağlantısı** alanına yapıştırın veya M3U dosyanızı seçin. Aynı anda yalnızca bir yöntem kullanın.
6. **IPTV kategorilerini ve kanalları ekle** düğmesine basın. Sonuç ekranındaki **IPTV klasörünü aç** bağlantısıyla kanalları görün. Üstteki **IPTV.m3u indir** bağlantısı, kategorileri ve kısa proxy adreslerini içeren dosyayı indirir.

Kaynak şifresi koda gömülmedi. Bağlantıyı kendiniz forma girin; yalnızca form içe aktarmasında kullanılır. Kaynak URL ekranlara geri yazılmaz. Kanal URL'leri çalışma için sunucudaki `config.json` dosyasında tutulur. Sohbette paylaşılmış parolayı değiştirin. HTTPS, güçlü panel parolası ve tercihen VPN/IP kısıtlaması kullanın. Güvenli depolama **disk şifreleme anlamına gelmez**; yedeklerin de korunması gerekir.

## Davranış

- Kategori `group-title` alanından alınır; yoksa `#EXTGRP` kullanılır. İkisi de yoksa kanal **Genel** altında görünür. Listede bulunmayan kategoriler tahmin edilmez.
- Aynı kanal URL'si yeniden gelirse mevcut IPTV kaydı güncellenir; kısa ID değişmez. Aynı URL başka bir eski kayıt/dizi içinde bulunuyorsa o kayıt değiştirilmez ve IPTV aktarımında atlanır. URL'si değişen kanal yeni kayıt sayılır; listeden çıkarılmış eski kanallar kendiliğinden silinmez.
- Kanal adı ve kategorisi aramada kullanılır. Klasöre taşıma ve silme desteklenir. Kaynak adresini panel HTML'ine koymamak için IPTV satırlarında eski URL düzenleme penceresi gösterilmez; ad/kategori güncellemesi yeniden içe aktarma ile yapılır.
- Parser UTF-8 genişletilmiş M3U bekler. Tek yayının HLS segment playlisti bir kanal listesi olarak içe aktarılmaz. URL'den alınan listede göreli adresler kaynak URL'sine göre çözülür; dosyadan yüklenen listede mutlak HTTP/HTTPS kanal adresleri gerekir.
- Liste indirme işlemi genel IPv4 adresleriyle sınırlı, TLS doğrulamalı, en fazla 4 yönlendirmeli ve 45 saniye ağ süre bütçelidir. Özel ağ adresleri ve HTTPS'ten HTTP'ye yönlendirmeler engellenir. DNS çözümleyicisinin kendi zaman aşımı ayrıca geçerlidir. Kaynak User-Agent `Internal-IPTV-Importer/1.0` olur; özel çerez/başlık isteyen kaynaklar için ek yapılandırma gerekebilir.
- En fazla 20 MB ve 50.000 kanal işlenir. Büyük listelerde hosting bellek/işlem sınırları daha önce devreye girebilir. Dosya yüklemesi için cPanel MultiPHP INI Editor'da `upload_max_filesize=20M`, `post_max_size=24M`, gerekirse `memory_limit=256M`, `max_execution_time=90` ayarlarını sağlayıcınızla doğrulayın. Çok büyük listelerde panelin tüm kanalları tek sayfada çizmesi tarayıcıyı yavaşlatabilir.
- Admin, IPTV importer ve dizi dönüştürücüsü aynı kayıt kilidini kullanır. Eşzamanlı eski bir panel kaydı başka işlemi ezmeye çalışırsa 409 ile durdurulur; paneli yenileyin. `merge.ps1` gibi harici dosya yazıcıları bu kilidi kullanmadığından panel işlemleriyle aynı anda çalıştırılmamalıdır.
- Mevcut proxy'nin davranışı değiştirilmedi. Ham `.ts` yayınları tarayıcıdaki HLS oynatıcıyla aynı format değildir; bu kanallar için kısa proxy bağlantısını veya indirilen M3U'yu uyumlu IPTV oynatıcınızda açın. Kaynağı değiştirmeden/transcode etmeden her yayını tarayıcıda oynatma garantisi yoktur.
- **Bağlantı 1/1 sınırı değişmez.** Bu bir kanal listesi yöneticisidir; tek upstream bağlantısını çoğaltmaz, sağlayıcının eşzamanlı bağlantı kotasını kaldırmaz. İçe aktarma yalnızca listeyi alır, her kanala test/oynatma isteği göndermez.
- Kısa proxy adresleri kaynak parolasını listede göstermez; ancak mevcut `proxy.php` üzerindeki erişim ve HLS alt adres davranışları ayrı konudur. İndirilen M3U'yu yalnızca yetkili kişilerle paylaşın. Bu güncelleme eski proxy için tam güvenlik denetimi değildir.

## Yerel doğrulama

`php tests/iptv_test.php` parser, tekrarları önleme, mevcut kayıtları koruma, bozuk JSON ve IP kontrollerini sınar.

`python tests/iptv_http_test.py` geçici kopyada giriş, CSRF, gerçek dosya yükleme, yerel HTTP kaynağından liste alma/yönlendirme, kategori görünümü ve M3U indirmesini sınar. Kaynak parolasının HTML ve indirme dosyasına konmadığı kontrol edilir. Test amaçlı loopback istisnası yalnızca silinen geçici kopyadadır.

Verilen gerçek yayıncıya bağlanılmadı. Mevcut `config.json` değiştirilmedi. cPanel sunucusuna kurulum ve gerçek kaynak erişimi henüz yapılmadı.
