Php de dosyaya yazma

Ceviz Viki, özgür ansiklopedi

Git ve: kullan, ara

dosyaya yazma;


Dosya işlemlerinde önemli olan aslında,dosyayı açarak işlem yapmaktadır.PHP daha öncede anlattığımız gibi metin dosyalarında yapılamayacak herşeyi yaptıra biliyor.O yüzden benim bu konuda önemle vurgulayacağım dosyayı açabilmek ve üzerinde okuma yada yazma işlemi yapabilmektedir.Dosya işlemlerinden dosyaya yazma işlemi olan bu konumuz ile,ziyaretçinin formdan gelen bilgilerini bizim belirlediğimiz bir veritabanında saklayabiliriz.İşte bundan dolayı bu konu bizim için ileriye dönük mysql gibi veritabanlarının mantığı konusunda bir fikir edindirecektir.Şimdi olayı genel boyuta getirirsek,PHP dosyayı açmak için fopen komutunu bize vermektedir.Dolayısıyla bu komut ile dosyalarımıza bağlanıp,üzerinde her türlü bilgi alışverişini yapabiliriz.fopen komutu ile beraber bazı parametreler kullanırız,örneğin fopen komutuyla dosyayı açıcaz ama ne için açıcaz,işte bunları veren parametrelerimiz aşağıdaki tablodadır.

Alıntı: "r" parametresi: dosyayı okumak için kullanılır "r+" parametresi hem okumak hemde yazmak için kullanılır "w" parametresi dosyaya yazmak için kullanılır,belirtilen dosya yok ise dosya oluşturup,içeriğini silerek sadece her yazımda tek bir veri oluşturur. "w+" parametresi w+ komutuyla aynı görevi yapar,tek farkı okumada yapabilir. "a" parametresi bu parametre "w" parametresinin tam tersi olarak,her verigirişinde eski veriyi silmeyerek,dosyanın sonuna yeni verigirişini sağlar. "a+" parametresi a parametresinle aynıdır tek farkı okuyabilirde. Bu parametreleri kesinlikle öğrenmeye çalışın arkadaşlar,fopen komutuyla beraber kullanacağımız önemli parametrelerdir bunlar.Şimdi ne demek istediğimizi somut bir örnekle göstermeye çalışalım.Alttaki kodu fopen.php olarak dizininize kaydedin.

<?php
$dizin="/Apache/htdocs";
$dosya="deneme.php";
if (fopen ("$dizin/$dosya",'r') ) {
echo "dosyayı açabildim";
}else {
echo "hata oldu";
}
?>

Bu kodu çalıştırdığımızda karşımıza eğer hata yoksa,dosyayı açabildim sonuç nesnesi çıkacaktır.Komutu açmak gerekirse,ilk önce dizin değişkenine dizinimizin url sini depoladık ve daha sonra istediğimiz dosyayı açabilmek için,dosya ismini dosya değişkenine koyduk,ve daha sonra if deyimiyle ve fopen komutuyla belirttiğimiz dosyayı r parametresiyle yani okumak için aç diyoruz.komutun türkce meali budur arkadaslar.Sakın ezberlemeyin,ezberlerseniz bu iş olmaz.eğer sunucu dosyayı açabilirse if sonucunu ekrana basıcaktır,eğer ki açamazsa dosyada bir hata varsa else komutunun sonuç nesnesi ekrana basıcaktır.fopen komutunun işleme tarzı bu arkadaşlar.Zorluğu yok yani.Sunucu bazen dosyayı açamazsa hata mesajları verebiliyor,biz bu hata mesajlarının ziyaretçi tarafından görünmemesini isteriz.Bunun için hatanın ne oldugunu anlayabilmemiz için fopen komutunu genelde @fopen olarak kullanırız,farklı bir misyon vermez bu işaret,sadece hatanın ne oldugunu görebilmemiz için ,böyle yaparız,tabi eğer hata varsa komutta.@fopen olarak kullanmanız daha faydalı olacaktır sizin için.yukarıdaki kodda fopen komutunun önüne @ işareti getirerek denediğinizde sonucun değişmediğini göreceksiniz.

Şimdi esas olarak dosyayı okumak için açtığımızı öğrendik,peki bir veritabanına bilgi girişi nasıl yapılır? acar veritabanını yazarım değil mi? :)) öyle değil.örneğin dizininizdeki bir dosyaya dizininizi açmadan bir bilgi gireceksiniz.Hocam nasıl olcak,imkansız demeyin...:) okus pokusla da yapmıycaz.Şimdi alttaki kodu yazma01.php olarak kaydedin.

<?php
$dizin="/Apache/htdocs";
$dosya="yazma.db";
if (!file_exists ("$dizin/$dosya") ) {
touch ($dosya);
}
$baglan=@fopen ("$dizin/$dosya",'w');
if (!$baglan) {
echo "dosyayı açamadım";
exit();
}
if (fputs ($baglan,"aligurbuz webmaster") ){
echo "veritabanına bilgi girişi yapıldı";
}else {
echo "veritabanına bilgi girişi yapılamadı";
}
fclose($baglan);
?>

Bu kodu çalıştırdığınızda karsınıza veritabanına bilgi girişi yapıldı yazısı çıkacaktır.Komutu anlamak için şöyle bir açıklama yapayım size,ilk önce dizinimizin url sini dizin değişkenine depoladık,daha sonra yazma.db adında bir veritabanını dosya değişkenine yazdık.

!file_exists komutu file_exists komutunun tam tersini yapar.Peki neydi file_exists komutu (var ) demekti değil mi? önüne ünlem koyarsak bu sefer tam tersi olur yani (yok) olur.eğer belirttiğimiz dizinde yazma.db adında bir veritabanı yok ise, touch komutuyla bu dosyayı oluştur.


Buraya kadar anladık sanırsam.daha sonra $baglan değişkenine fopen komutuyla yazmak için ("w" parametresiyle) belirttiğimiz dosyayı aç dedik.eğer ki açamazsan yani (!$baglan) dosyaya bağlanamadım yaz ve programı exit ile durdur.ama bağlanırsan dosyaya devam et ve puts (koymaktır) puts komutuyla $baglan,yani bağlandığımız dosyaya "aligurbuz webmaster" nesnesi koy.eğer koyarsan ekrana veritabanına bilgi girişi yapıldı diye ilk sonucu bas,eğer ki koyamazsan else komutuyla bilgi girişi yapılamadı diye sonuc nesnesini bas,ve daha sonra işlem bitince,bağlantıyı fclose ile kapat.

Arkadaşlar,yukarıda anlattığım yazıyı başka hiç bir yerde bulamazsınız,ve bundan baska daha sade bir anlatımda olamaz.en sade anlatım ve komutun tek tek açılımı budur işte.Şimdi ne yaptık peki kendi gözlerimizle görelim...Şimdi gelin dizininize ve yazma.db adında bir veritabanı var mı yok mu bir kontrol edin bakalım...daha sonra bu veritabanını not defterinle acın bakalım ne goreceksiniz.Anladınız değil mi? istediğimiz bilgiyi veritabanına yazdırdık.

Şimdi konunun başındaki parametrelere iyice dikkat ettiğinizde "w" parametresinin tek bir verigirişini sağlayabildiğini yazdık.Yani siz bu komutun dosyaya yazılan nesnesini istediğiniz şekilde değiştirin ve kaydedin.örneğin; ali gurbuz webmaster yerine istediğiniz bir kelimeyi yazın ve çalıştırın dosyayı,veritabanı girişi yapıldı diyecektir.ama dizinimizde yazma.db adlı veritabanı dosyamızı açtığımızda ise,karşımıza son yazdığımız kelime çıkacak,yani ali gurbuz webmaster yazısı silinecektir.İşte "w" parametresi böyle bir olayı gerçekleştiriyor. peki hocam,birden cok veriyi alt alta nasıl yazıcaz derseniz, "a" parametresini kullanın derim.Şimdi alttaki kodu yazma02.php olarak dizinize kaydedin.

<?php
$dizin="/Apache/htdocs";
$dosya="yazma.db";
if (!file_exists ("$dizin/$dosya") ) {
touch ($dosya);
}
$baglan=@fopen ("$dizin/$dosya",'a');
if (!$baglan) {
echo "dosyayı açamadım";
exit();
}
if (fputs ($baglan,"php web dünyasına hoşgeldiniz\n") ){
echo "veritabanına bilgi girişi yapıldı";
}else {
echo "veritabanına bilgi girişi yapılamadı";
}
fclose($baglan);
?>

Bu kodda a parametresi kullandık bu dosyayı bir kaç kez çalıştırın ardı ardına ve dizininizdeki veritabanı içine bakın bakalım ne fark göreceksiniz.yan yana ayrılmıs parametreyle veri depolanacaktır. burada yan yana yazmasında ayırma komutu kullanması için farkettiyseniz girdi nesnemizin yanında \n yazdık.buda verigirişlerinin birbirinden ayrılmasını sağlar.Evet gördüğünüz gibi a parametresiyle girilen veriler silinmiyor aksine verigirişleri bir veritabanında böylelikle depolanmış oldu.Şimdi isterseniz şöyle bir form yapalım ve formda ad ve soyad bilgileri olsun,ziyaretçiler bu formu doldurdugunda bilgiler direk olarak bizim istediğimiz veritabanında depolansın.Hadi gelin şimdi böyle bir veritabanı oluşturalım.Aşağıdaki kodu yazma03.htm olarak dizininize kaydedin.

<html>
<head><title>deneme</title>
</head>
<body>
<div align="center"><strong>kullanıcı girişi formu</strong>
<form action="yazma03.php" method="post">
adınız:<input type="text" name="ad"><br>
soyadınız:<input type="text" name="soyad"><br>
<input type="submit" value="gir">
</form>
</div>
</body>
</html>
 
 
Şimdi aşağıdaki koduda yazma03.php olarak dizininize kaydedin.
 
<?php
$dizin="/Apache/htdocs";
$dosya="veri.db";
$adi="$ad";
$soyadi="$soyad";
if (!file_exists ("$dizin/$dosya") ) {
touch ($dosya);
}
$baglan=@fopen ("$dizin/$dosya",'a');
if (!$baglan) {
echo "dosyayı açamadım";
exit();
}
if (fputs ($baglan,"adı:$ad soyadı:$soyad\n") ){
echo "veritabanına bilgi girişi yapıldı";
}else {
echo "veritabanına bilgi girişi yapılamadı";
}
fclose($baglan);
?>

Şimdi yazma03.htm dosyanızı çalıştırın ve forma isminizi ve soy isminizi yazıp gir butonuna basın.Bakın veritabanına bilgi girişi yapıldı diyecek yine,ve oluşturduğumuz veri.db adındaki dosyayı açın bakın.Formdan doldurdugunuz bilgiler bu veritabanında toplanıcak artık.Formu bir kac kez farklı isim ve soy isimle çalıştırdığınızda girdiğiniz tüm bilgiler artık veri.db adındaki bilgi dosyasında toplanacaktır.