• 05-07-2007, 23:06:03
    #1
    Üyeliği durduruldu
    Selam arkadaşlar,

    Kendimce class yazdım fakat nedense online.txt dosya oluşturmuyor ve kendim manuel oluştursamda içine veri işlemiyor ve içinden veri almıyor. Nerede bunun hatası anlayabilmiş değilim. eminim gözümden kaçan ufak bir hatası vardır.

    session_start();
    class online {
    
        var $online_uyeler;
        var $dosyaadi = "online.txt";
        function online(){
        if(!file_exists($dosyaadi))
        {
            touch($dosyaadi);
        }
    }
        
        function yazdir(){
            while (list($anahtar,$deger) = each($this->online_uyeler)) {
                $icerik .= $anahtar."-".$deger.";";
            }
                $icerik = substr($icerik,0,strlen($icerik)-1);
            if (is_writable($dosyaadi)) {
            if($handle = fopen($dosyaadi,"w") !== false){
                    if(fwrite($handle,$icerik) !== false){
                        fclose($handle);    
                        return true;
                    }
                }            
            }
          return false;    
        }
        
        function oku(){
            if(is_readable($dosyaadi)){
            if($handle = fopen($dosyaadi,"r") !== false){
                    $veri = "";
                    while(!feof($handle)){
                    $veri .= fread($handle,filesize($dosyaadi));
                    }
                  fclose($handle);    
                  return $veri;
                }
            }
          return false;
        }
        
        function veri_ekle($uye_id,$kullaniciadi){
            $this->veri_listele();
            $this->online_uyeler[$uye_id] = $kullaniciadi;
            $this->yazdir();
        }
        
        function veri_sil($uye_id){
            $this->veri_listele();
            unset($this->online_uyeler[$uye_id]);
            $this->yazdir();
        }
        
        function veri_listele(){
            $icerikler = $this->oku();
            if($icerikler !== false){
                $icerik = explode(';',$icerikler);
                unset($this->online_uyeler);
                for($i=0;$i<count($icerik);$i++){
                    $anahtar_deger = explode('-',$icerik[$i]);
                    $anahtar = $anahtar_deger[0];
                    $deger = $anahtar_deger[1];
                    $this->online_uyeler[$anahtar] = $deger;
                }
            }
        }
        
        function veri_goster(){
            $this->veri_listele();
            return $this->online_uyeler;
        }
    }
    
    
    //Kullanım Şekli..
    $online = new online; //Class'ımızı yarattık.
    if(isset($_GET["login"])){
    $online->veri_ekle($_SESSION["uye_id"],$_SESSION["kullaniciadi"]); //Kullanıcı login olduğu an kullanıcı eklenecek.
    }
    
    if(isset($_GET["logout"])){
    $online->veri_sil($_SESSION["uye_id"]); //Kullanıcı çıkış yaptığı an kullanıcı silinecek.
    }
    
    if(isset($_GET["master"])){
    $uyeler = $online->veri_goster(); //Kullanıcıları gösterir.
    if($uyeler){
        while (list($anahtar,$deger) = each($uyeler)) {
            echo $deger."<br />";
         }
    }else{
        echo "Sitede online üye yok.";
      }
     }
  • 05-07-2007, 23:20:42
    #2
    pek anlamam ama öncelikle txt dosyasının chmodunu 777 yapıp denesen belki çalışır
  • 06-07-2007, 00:49:57
    #3
    Lisans buna başka bir forumda cevap vermiştim touch yanlış fonksiyon. o sadece dosyanın değiştirilme tarihini değiştiriyor...
    Detaylar ceviz'de
  • 06-07-2007, 02:20:45
    #4
    Üyeliği durduruldu
    Alıntı
    1-touch fonksiyonu varolan dosyaların "modify" yani değiştirldiği tarihi değiştirip güncel tarihi yazıyor. Windows altında çalışmaz. Dosya oluşturmak için fopen'ı w parametresi ile açman yeterli.Yazdir fonkisyonunda dosyayı açarken a+ parametresi ile açarsan varolan dosya üstüne yazar bu sayade eski online listeni kaybetmemiş olursun.
    Evet okudum cevabını, windowslarda çalışmaz demişsin birde hostta deniyorum(linux) yine çalışmıyor extradan touch dosya oluşturur diye biliyorum. Birde yazdir fonksiyonunda fopen'i kullanırken dosyayı w ile açıyorum, sende w ile açtırırsan oluşturulur zaten demişsin. ama bundaki sorun başka biryerde çünkü dosyayı oluşturmuyor bile.
  • 06-07-2007, 07:58:02
    #5
    master & login & logout durumlarını tek tek denedim. çalışıyor sanırım

    <?
    error_reporting (E_ALL | E_STRICT);
    session_start();
    
    class online {
    
        var $online_uyeler;
        var $dosyaadi = "online.txt";
        var $file;
        var $readFile;
        
        function online(){
            $this->file = fopen ($this->dosyaadi , "w+");
            $this->readFile = fopen ($this->dosyaadi , "r");
        }
        
        function yazdir(){
            $icerik = "";
            while (list($anahtar,$deger) = each($this->online_uyeler)) {
                $icerik .= $anahtar."-".$deger.";";
            }
               $icerik = substr($icerik,0,strlen($icerik)-1);
            if (is_writable($this->dosyaadi)) {
    
                if(fwrite($this->file,$icerik) !== false){
                    fclose($this->file);    
                    return true;
                    }
            }
          return false;    
        }
        
        function oku(){
            if(is_readable($this->dosyaadi) && filesize($this->dosyaadi) > 0){
                    $veri = "";
                    while(!feof($this->file)){
                    $veri .= fread($this->file,filesize($this->dosyaadi));
                    }
                  fclose($this->file);    
                  return $veri;
            }
          return false;
        }
        
        function veri_ekle($uye_id,$kullaniciadi){
            $this->veri_listele();
            $this->online_uyeler[$uye_id] = $kullaniciadi;
            $this->yazdir();
        }
        
        function veri_sil($uye_id){
            $this->veri_listele();
            unset($this->online_uyeler[$uye_id]);
            //$this->yazdir();  üstte online üyeleri unset yapıyorsun sonra yazdir çağırınca yazdır içindeki each fonksiyonu dizi istiyor... 
            //sen online uyeleri dizilikten çıkardın :)
        }
        
        function veri_listele(){
            $icerikler = $this->oku();
            if($icerikler !== false){
                $icerik = explode(';',$icerikler);
                unset($this->online_uyeler);
                for($i=0;$i<count($icerik);$i++){
                    $anahtar_deger = explode('-',$icerik[$i]);
                    $anahtar = $anahtar_deger[0];
                    $deger = $anahtar_deger[1];
                    $this->online_uyeler[$anahtar] = $deger;
                }
            }
        }
        
        function veri_goster(){
            $this->veri_listele();
            return $this->online_uyeler;
        }
    }
    
    
    //Kullanım Şekli..
    $yeniOnline= new online; //Class'ımızı yarattık.
    $_GET['login'] =1 ;$_GET['master'] = 1;
    
    if(isset($_GET['login'])){
    $yeniOnline->veri_ekle($_SESSION["uye_id"],$_SESSION["kullaniciadi"]); //Kullanıcı login olduğu an kullanıcı eklenecek.
    }
    
    if(isset($_GET["logout"])){
    $yeniOnline->veri_sil($_SESSION["uye_id"]); //Kullanıcı çıkış yaptığı an kullanıcı silinecek.
    }
    
    if(isset($_GET["master"])){
    $uyeler = $yeniOnline->veri_goster(); //Kullanıcıları gösterir.
    if($uyeler){
        while (list($anahtar,$deger) = each($uyeler)) {
            echo $deger."<br />";
         }
    }else{
        echo "Sitede online üye yok.";
      }
     } 
     
     
     ?>