+ Yanıtla
Toplam 5 sonuçtan 1 ile 5 arası olanlar

Konu Başlığı: Fopen ile replace nasıl yapılır ?

  1. #1

    Fopen ile replace nasıl yapılır ?

    Merhaba arkadaşlar. Ufak bir problemim var. Bir dosyada belirli bir satırdan sonrasını dosyayı fopenla açıp fwrite ile değiştirmek istiyorum. Böyle birşey nasıl olur bu konuda bir kaynak var mıdır ?

  2. #2
    Standart fopen'la actiktan sonra dosyanin icerigini alip istedigin yerden bolersin. Daha sonra degiskenin sonuna istedigini ekleyip, dosyayi 'write' modunda acip yazarsin. Google'da 'PHP file read' veya write diye arattiginda baya bir kaynak cikiyor.

    Eger sorunun daha komplikeyse biraz daha aciklarsan yardimci olabiliriz...

  3. #3
    Kullandığım bir modül httacces dosyasını kendisi yazdırıyor. Ben istiyorum ki benim yazdığım bölümler sabit kalsın, sadece modun başladığı yerden sonrasını değiştirmesini sağlamaya çalışıyorum. Mod şu şekilde dosyayı yeniden oluşturuyor.

    Kod:
    	//	Backup the current .htaccess file
    	@copy($boarddir . '/.htaccess', $boarddir . '/.htaccess.backup-' . date('Y-m-d'));
    
    	//	Build the new .htaccess file
    	$htaccess = '#	Pretty URLs mod
    #	http://code.Google.com/p/prettyurls/
    #	.htaccess file generated automatically on: ' . date('F j, Y, G:i') . '
    
    RewriteEngine on';
    
    	//	Output the rules
    	ksort($rewrites);
    	foreach ($rewrites as $rule)
    	{
    		$htaccess .= "\n\n#	Rules for: " . $rule['id'] . "\n";
    		if (is_array($rule['rule']))
    			$htaccess .= implode("\n", $rule['rule']);
    		else
    			$htaccess .= $rule['rule'];
    	}
    
    	//	Output the file
    	$handle = fopen($boarddir . '/.htaccess', 'w');
    	fwrite($handle, $htaccess);
    	fclose($handle);
    
    Kısaca ben "# Pretty URLs mod" un üzerine birşey eklersem buna dokunmamasını istiyorum. Sadece kendi işlevini sağlayacak bölümü değiştirmeli. Dökümanlar biraz karmaşık geldi açıkcası önce okutup sonra okuduğunun ondan üst kısmını ve modun şuanki ekleyeceği şeyleri onun altına eklemesini sağlamak gerekiyor. Teoride kolay gibi geliyor ama pratikte epey zorluyor beni.

  4. #4
    Simdi biliyosun ki '# Pretty URLs mod' bu oncesiyle sonrasini ayiriyor birbirinden.
    O zaman once dosyayi okuruz;

    Kod:
    $fh=fopen($boarddir . '/.htaccess', 'r');
    $theData = fread($fh, filesize($boarddir . '/.htaccess'));
    fclose($fh);
    
    Boylece dosyanin tum icerigi $theData degiskenininde tutuluyor. Daha sonra bunu en basit yoldan iki parcaya bolelim (bu text'in basladigi pozisyonu bulup, oraya kadar olan kismi substr ile de alabilirdin ki best practice boyle yaptirir ama cesitlilik olsun diye ben explode'u gostermek istedim);

    Kod:
    $part=explode('#	Pretty URLs mod', $theData);
    
    Simdi iki parca var elimizde, $part[0] ve $part[1]. Sen $part[0]'i tutmak istiyorsun. Buraya koydugun kodda en son yazma isleminin oldugu yerde bunlari birlestirebilirsin.

    Kod:
    .....
    $handle = fopen($boarddir . '/.htaccess', 'w');
    fwrite($handle, $part[0].$htaccess);
    fclose($handle);
    
    ---
    Simdi bu bir yol. Bunun disinda istersen sen kendi ekleyecegin kismi baska bir dosyada tutarsin. Daha sonra yukaridaki islemi o dosya icin uygular, o dosyanin icerigini .htaccess dosyasina yazdirirsin. Soyle ki, .pre_htaccess diye bir dosya yarattin diyelim. Bu dosyaya sen oncelik olarak ne eklemek istiyorsan yazdin. Daha sonra

    Kod:
    $fh=fopen($boarddir . '/.pre_htaccess', 'r');
    $pre_htaccess = fread($fh, filesize($boarddir . '/.pre_htaccess'));
    fclose($fh);
    ..... (burada senin c/p'ledigin kod calisiyor, en son yazma kismiysa soyle degisiyor)
    $handle = fopen($boarddir . '/.htaccess', 'w');
    fwrite($handle, $pre_htaccess.$htaccess);
    fclose($handle);
    

  5. #5
    Gerçekten teşekkür ederim. İlk yöntemle çok güzel birşekilde oldu. Birinci yolu kullandım ama aslında ikinci yol da işime çok yarayacak. Öğrendiğim çok iyi oldu.

+ Yanıtla

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz