Gereksinimler ve Ön Hazırlık
Bu sistemi uygulamak için temel seviyede PHP bilgisine ve bir veritabanı yönetim sistemine (MySQL veya MariaDB) ihtiyacınız vardır. Sisteminizde PHP 8.1 veya üzeri bir sürümün kurulu olması, modern güvenlik standartları için önerilir.
- PHP 8.1+
- MySQL 8.0+ veya MariaDB
- PDO (PHP Data Objects) eklentisi
- Sunucu tarafında Cron Job (Zamanlanmış Görevler) çalıştırma yetkisi
Veritabanı Yapısının Kurulması
İçerik zamanlayıcı sisteminin kalbi veritabanıdır. İçeriklerin durumunu ve yayınlanma zamanını tutacak bir tablo tasarımı yapmalıyız. Aşağıdaki SQL sorgusu, zamanlama mantığı için gerekli sütunları içeren basit bir tablo yapısını oluşturur.
CREATE TABLE icerikler (
id INT AUTO_INCREMENT PRIMARY KEY,
baslik VARCHAR(255) NOT NULL,
icerik TEXT,
durum ENUM('taslak', 'zamanlanmış', 'yayında') DEFAULT 'taslak',
yayinlanma_tarihi DATETIME DEFAULT NULL,
olusturulma_tarihi TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Bu yapıda durum sütunu içeriğin mevcut halini, yayinlanma_tarihi ise içeriğin ne zaman otomatik olarak yayına geçeceğini belirler. DATETIME formatı, karşılaştırma işlemleri için standart ve güvenilir bir yöntemdir.
PHP ile İçerik Zamanlama Mantığı
İçerik oluştururken veya güncellerken, veritabanına doğru verileri göndermemiz gerekir. Kullanıcıdan gelen verileri PDO kullanarak güvenli bir şekilde kaydedelim. SQL Injection saldırılarına karşı hazırlıklı olmak için mutlaka "prepared statements" (hazırlanmış ifadeler) kullanmalıyız.
// Veritabanı bağlantısı
$pdo = new PDO('mysql:host=localhost;dbname=proje_db', 'kullanici', 'sifre');
$sql = "INSERT INTO icerikler (baslik, icerik, durum, yayinlanma_tarihi) VALUES (?, ?, ?, ?)";
$stmt = $pdo->prepare($sql);
$baslik = "Otomatik İçerik Başlığı";
$icerik = "Bu içerik zamanlanmış bir gönderidir.";
$durum = "zamanlanmış";
$yayin_tarihi = "2026-12-31 10:00:00";
$stmt->execute([$baslik, $icerik, $durum, $yayin_tarihi]);
Bu kod bloğu, içeriği "zamanlanmış" durumuyla birlikte veritabanına kaydeder. yayinlanma_tarihi değişkenine atanan değer, sistemin ne zaman tetikleneceğini belirler.
Otomatik Yayınlama Betiği (Cron Job)
İçerikleri otomatik olarak yayına alacak olan PHP betiği, sunucuda periyodik olarak çalışmalıdır. Bu betik, şu anki zamandan daha eski veya eşit olan "zamanlanmış" içerikleri bulmalı ve durumlarını "yayında" olarak güncellemelidir.
// cron_yayinla.php
$simdi = date('Y-m-d H:i:s');
$sql = "UPDATE icerikler
SET durum = 'yayında'
WHERE durum = 'zamanlanmış' AND yayinlanma_tarihi
Performans Optimizasyonu ve İndeksleme Stratejileri
Zamanlanmış içerik sisteminiz büyüdükçe, veritabanı sorgularınızın hızı kritik bir öneme sahip olacaktır. Binlerce satırlık bir icerikler tablosunda, her dakika çalışan bir Cron Job'ın tüm tabloyu taraması sunucu kaynaklarını tüketebilir. Bu durumu engellemek için veritabanı seviyesinde indeksleme yapmak şarttır.
Sorgularınızda durum ve yayinlanma_tarihi sütunlarını sürekli filtrelediğiniz için, bu sütunlara birleşik bir indeks (composite index) eklemek, sorgu süresini milisaniyelere indirecektir.
-- Performans artışı için indeks ekleme
CREATE INDEX idx_zamanlama ON icerikler (durum, yayinlanma_tarihi);
Ayrıca, büyük ölçekli sistemlerde UPDATE işlemini çalıştırmadan önce, sadece güncellenmesi gereken kayıtların olup olmadığını kontrol eden bir SELECT sorgusu çalıştırarak gereksiz yazma işlemlerinden kaçınabilirsiniz.
Hata Ayıklama ve Loglama Mekanizması
Otomatik süreçler arka planda çalıştığı için, bir hata oluştuğunda bunu fark etmek zordur. Cron Job'ın başarılı olup olmadığını veya hangi içeriğin ne zaman yayına alındığını takip etmek için basit bir loglama sistemi kurmalısınız.
Aşağıdaki örnek, her çalıştırma işlemini bir metin dosyasına kaydederek sistemin sağlığını izlemenize olanak tanır:
// cron_yayinla.php içerisinde loglama yapısı
$logDosyasi = 'cron_log.txt';
$tarih = date('Y-m-d H:i:s');
try {
$stmt = $pdo->prepare("UPDATE icerikler SET durum = 'yayında' WHERE durum = 'zamanlanmış' AND yayinlanma_tarihi


Yorumlar (0)
Yorum Yaz