
Sipariş faturası, teklif belgesi, rapor çıktısı — sitenizin PDF üretmesi gereken bir noktaya geldiniz. Kütüphaneler çok, ama hepsi paylaşımlı hostingde çalışmıyor.
Bu yazı, belge üretiminin hosting ortamındaki gerçek kısıtlarını ele alıyor.
Üç Farklı Yöntem
PHP ile PDF üretmenin yolları ve hosting uyumluluğu:
| Yöntem | Paylaşımlı hostingde |
|---|---|
| Saf PHP kütüphanesi | Çalışır — en uyumlu seçenek |
| HTML'den dönüştürme | Genellikle çalışır, kaynak yoğun |
| Tarayıcı motoru kullanan araçlar | Çalışmaz — sistem erişimi gerekir |
| Dış servis | Çalışır, maliyet ve gizlilik konusu |
Üçüncü satır çoğu kişinin ilk denediği ve başarısız olduğu yoldur: tarayıcı motoru kullanan araçlar sistem düzeyinde program çalıştırma yetkisi ister ve paylaşımlı hostingde bu yetki verilmez.
Bu araçlar en iyi görsel sonucu üretir ama kendi sunucunuzu yönetmiyorsanız erişilebilir değildir.
Saf PHP Kütüphaneleri
Paylaşımlı hosting için en güvenli seçenektir. Özellikleri:
- Ek sistem bileşeni gerektirmez. Yalnızca PHP.
- Belge yapısını kod ile kurarsınız. Sayfa, metin, çizgi, tablo.
- Görsel tasarım sınırlıdır. Karmaşık düzenler zahmetlidir.
- Bellek kullanımı öngörülebilirdir.
- Hızlıdır. Dönüştürme adımı yoktur.
İkinci madde hem avantaj hem dezavantajdır: belgeyi kod ile kurmak tam denetim sağlar ama tasarım değişikliği kod değişikliği gerektirir.
Fatura, makbuz, sertifika gibi sabit düzenli belgeler için ideal; sık tasarım değişen pazarlama belgeleri için zahmetlidir.
Türkçe Karakter Sorunu
PDF üretiminde en sık yaşanan sorun budur ve nedeni yazı tipidir:
- Varsayılan PDF yazı tipleri sınırlı karakter içerir
- Türkçe karakterler bu sette bulunmayabilir
- Sonuçta soru işareti veya boş kutu görünür
- Çözüm, Türkçe destekleyen bir yazı tipi gömmektir
Dördüncü madde uygulanırken dikkat edilecek nokta şudur: yazı tipini gömmek belge boyutunu artırır — bu yüzden yalnızca kullanılan karakterleri içeren bir alt küme tercih edilmelidir.
Ayrıca metin kodlamasının tutarlı olması gerekir. Veritabanınız, PHP dosyalarınız ve PDF kütüphanesi aynı kodlamayı kullanmıyorsa, doğru yazı tipiyle bile bozuk çıktı alırsınız.
Kaynak Kullanımı
Belge üretimi paylaşımlı hostingde limitlere takılabilir:
| Sınır | Etkisi |
|---|---|
| Bellek limiti | Uzun belgede tükenir |
| Süre limiti | Üretim yarıda kesilir |
| Disk alanı | Üretilen dosyalar birikir |
| Eşzamanlı işlem | Toplu üretimde tıkanma |
Üçüncü satır zamanla ortaya çıkan bir sorundur: her sipariş için üretilen PDF'ler diskte saklanıyorsa, aylar içinde ciddi bir alan tüketimi oluşur.
İki seçenek vardır: belgeyi saklamak yerine her istekte yeniden üretmek, veya üretip saklamak ama belirli bir süre sonra temizlemek. İlki daha temizdir ama her indirme işlemi kaynak tüketir.
Toplu Üretim
Yüzlerce belge üretmek gerekiyorsa yaklaşım değişir:
- Web isteği içinde yapmayın. Zaman aşımına uğrar.
- Zamanlanmış göreve taşıyın.
- Parçalara bölün. Her çalıştırmada belirli sayıda.
- İlerlemeyi kaydedin. Kesilirse kaldığı yerden devam etsin.
- Bittiğinde bildirim gönderin.
Dördüncü madde dayanıklılık sağlar: hangi kaydın işlendiğini veritabanında işaretlemek, kesinti sonrası baştan başlamayı önler.
Üçüncü madde ise paylaşımlı hostingde zorunludur — tek seferde beş yüz belge üretmeye çalışan bir görev, kaynak limitlerine takılıp yarıda kesilir.
Güvenlik ve Erişim
Üretilen belgeler genellikle özel bilgi içerir:
- Tahmin edilebilir dosya adı kullanmayın. Sıra numarası olmasın.
- Web kökü dışında saklayın.
- Betik üzerinden sunun. Yetki kontrolüyle.
- İndirme kaydı tutun. Kim ne zaman indirdi?
- Dizin listelemeyi kapatın.
Birinci madde ciddi bir veri sızıntısı kaynağıdır: fatura dosyalarını sıra numarasıyla adlandırmak, bir kullanıcının başkalarının faturalarını görmesine yol açar — numarayı değiştirmesi yeterlidir.
Üçüncü madde bunun tek doğru çözümüdür. Dosya doğrudan erişilebilir olmamalı, isteyen kullanıcının o belgeye yetkisi olup olmadığı her indirmede kontrol edilmelidir.
Alternatif Biçimler
Her belge PDF olmak zorunda değildir:
| İhtiyaç | Uygun biçim |
|---|---|
| Yazdırılacak fatura | |
| Veri aktarımı | CSV veya tablo dosyası |
| Ekranda okunacak rapor | HTML — yazdırma stiliyle |
| Düzenlenecek belge | Kelime işlemci biçimi |
Üçüncü satır çoğu zaman gözden kaçan basit çözümdür: iyi hazırlanmış bir yazdırma stili, HTML sayfasını PDF'e gerek kalmadan düzgün çıktı alınabilir hâle getirir ve hiçbir kaynak tüketmez.
Bu yaklaşım özellikle raporlar için uygundur. Kullanıcı tarayıcının kendi yazdırma özelliğiyle PDF'e de çevirebilir. Bu seçeneklerin hangisinin uygun olduğu, hosting paketi kaynak limitlerinize göre de değişir.
Sonuç
Paylaşımlı hostingde belge üretiminin ilk kuralı, tarayıcı motoru kullanan araçları hesaba katmamaktır — bu araçlar sistem düzeyinde program çalıştırma yetkisi ister ve paylaşımlı ortamda bu yetki verilmez. Saf PHP kütüphaneleri en güvenli seçenektir; Türkçe karakter sorununu ise yazı tipi gömerek çözersiniz. Toplu üretimi web isteği içinde yapmayın, zamanlanmış göreve taşıyıp parçalara bölün. Ve en kritik güvenlik noktası: belgeleri sıra numarasıyla adlandırmak, kullanıcıların birbirinin faturasını görmesine yol açar.
Sıkça Sorulan Sorular (SSS)
Paylaşımlı hostingde hangi yöntem çalışır?
Saf PHP kütüphaneleri en uyumlu seçenektir, HTML'den dönüştürme de genellikle çalışır. Tarayıcı motoru kullanan araçlar ise çalışmaz — sistem düzeyinde program çalıştırma yetkisi isterler ve bu yetki paylaşımlı ortamda verilmez.
PDF'te Türkçe karakterler bozuk çıkıyor?
Varsayılan PDF yazı tipleri Türkçe karakterleri içermeyebilir. Çözüm, Türkçe destekleyen bir yazı tipini belgeye gömmektir — tercihen yalnızca kullanılan karakterleri içeren bir alt küme, çünkü gömme belge boyutunu artırır. Ayrıca kodlamanın tüm katmanlarda tutarlı olduğundan emin olun.
Yüzlerce belgeyi nasıl üretirim?
Web isteği içinde değil, zamanlanmış görevle. Her çalıştırmada belirli sayıda belge üretin ve hangi kaydın işlendiğini veritabanında işaretleyin — böylece kesinti olursa baştan başlamak gerekmez. Tek seferde toplu üretim kaynak limitlerine takılır.
Üretilen belgeleri nasıl korumalıyım?
Web kökünün dışında saklayın ve yalnızca yetki kontrolü yapan bir betik üzerinden sunun. Dosya adında sıra numarası kullanmayın — kullanıcı numarayı değiştirerek başkalarının belgelerine ulaşabilir. Bu, en sık görülen veri sızıntısı biçimlerinden biridir.