PHP dosyaları içinden ilk birkaç satırı silmek


Bu yazımda biraz farklı bir işlemden bahsetmek istiyorum. Bill Cosby’nin Leonard diye bir filmi vardı. Çok küçük yaşta seyretmiştim. Aklımda kalan adamın kendi vücuduna giren mermileri yine kendisinin çıkarttığı bir sahne vardı. Bir de yanlış hatırlamıyorsam ayaklarını duvarlara sürtünce kıvılcımlar çıkartan bir tavşan kostümlü dayı vardı.

Neyse, gelelim sadede… Ben de kendi kendini değiştiren bir sistem üzerine düşündüm biraz. Acaba dedim bir php dosyası ile başka bir php dosyasının üzerinde değişiklik yapmak mümkün müdür diye düşündüm. Özellikle son satırlarına birşeyler eklemekten ziyade, ilk satırlarını silsem nasıl olur diye düşündüm. Çünkü bu işlem diğerinden daha zor görünüyor. Mümkün olduğunu gördüm. Sizinle de paylaşmak istedim.

Eski tip fopen(), fwrite() fonksiyonlarıyla bunu yapmaya kalksak epeyice sürecek. Bunun yerine PHP 5.1.0 ile birlikte insanlığa armağan edilen SPL (Standard PHP Library) kütüphanesine dahil olan SplFileObject sınıfından faydalanacağız. Ayrıca örnek bir kullanımı da burada gösterilmiş olacak.

Öncelikle kurban edilecek bir konu mankeni veya kobay bir dosya lazım.

01 <?php
02     //kurban.php
03     $a = '';
04     $bb = '1';
05     //Ben de başka bir gereksiz satırım. Ne olur yok et beni.
06
07     ?>
08     <?php
09        $gerekliBirDegisken = 'Çok gerekli';
10        //Gerekli bir açıklama satırı... bitmez

Bir adet işlemleri gerçekleştirecek olan dosyamız olsun. Adı da dosyadegistir.php olsun. Diyelim ki ilk 7 satırı sileceğiz.

01    <?php
02    //dosyadegistir.php
03    $silinecekSatirSayisi = 7;
04    $yeniDosya = new SplFileObject('yeni.dosya', 'w');
05    foreach (new LimitIterator(new SplFileObject('kurban.php'), $silinecekSatirSayisi) as $satir)
06        $yeniDosya->fwrite($line);
07        rename('kurban.php', 'kurban.php.gecmisolsun');
08        $yeniDosya = null;
09        rename('yeni.dosya', 'kurban.php');
10    ?>

Üçüncü satırda kaç satır silinecekse onu belirliyoruz. Daha sonra döngü içinde kullanılacak. Doğrudan da LimitIterator sınıfının içine 7 şeklinde yazılabilirdi. Ancak anlaşılır olması açısından bu yolu seçtim.

Dördüncü satırda $yeniDosya değişkeni ile yeni.dosya adında bir dosya oluşturuyoruz ve yazma (w) modunda açıyoruz.

Beşinci satırda ilk 7 satırı atlayıp 8. satırdan başlayacak şekilde döngü içerisinde kurban.php dosyasının içindeki kodları yeni.dosya dosyasının içine aktarıyoruz. LimitIterator sınıfı çok hızlı, pratik ve nesne yönelimli olduğu için çok havalı bir görünüm kazandırıyor kodlarımıza. Ailecek seviyoruz.

Var olan kurban.php dosyasının ortadan kaldırılması lazım. Ancak ne olur ne olmaz devre dışı bırakmanın yeterli olduğunu düşündüğüm için silmek yerine dosyanın adını kurban.php.gecmisolsun olarak değiştiriyorum.

SplFileObject sınıfında dosyayı açabilirsiniz belki ama close() gibi bir fonksiyonu olmadığı için $yeniDosya değişkenini null olarak belirliyoruz. Böylece dosya kendiliğinden kapanmış olacaktır. Dosyayı neden kapatıyoruz? yeni.dosya isimli dosyanın adını kurban.php olarak değiştireceğiz. Ama kurban.php açık olduğu için sistem buna izin vermez ve exception oluşur.

Son olarak 9. satırda yeni.dosya isimli dosyayı kurban.php olarak değiştiriyoruz. Dosyayı açıp baktığınızda

01 <?php
02     $gerekliBirDegisken = 'Çok gerekli';
03     //Gerekli bir açıklama satırı... bitmez

şeklinde bir kod olması gerekir. Hayır yani, denedim de o yüzden söylüyorum.

2 thoughts on “PHP dosyaları içinden ilk birkaç satırı silmek

  1. dosyadegistir.php de
    6. satırı
    $new_file->fwrite($line); yerine
    $yeniDosya->fwrite($satir); şeklinde değiştirirseniz daha iyi olur hocam dikkat etmeyen arkadaşlar kodun çalışmadığını düşünebilirler.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s