Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Döngü

Konu, 'PHP' kısmında ab tarafından paylaşıldı.

  1. ab

    ab Aktif Üye

    Kayıt:
    19 Mayıs 2002
    Mesajlar:
    343
    Beğenilen Mesajlar:
    0
    Meslek:
    Oğrenci
    Şehir:
    İstanbul
    PHP:
    <?php
    print ("<html>"."\n"."<body>"."\n"."<head>"."\n"."<title>"."\n"."News"."\n"."</title>");
    print (
    "<link rel=\"stylesheet\" href=\"main.css\" type=\"text/css\">\n");
    print (
    "<table width=\"200\" height=\"100%\">\n");
    print (
    "<tr>\n");
    print (
    "<td>\n");
    static 
    $haberler;
    $dosya ="news.bd";
    $haber fopen ($dosya'r');
    //Dosyayi okut array a ata
    while (!feof($haber))
    {
    $satir fread($haber1024);
    $haber_array explode ("\n"$satir);
    $haberler $haber_array;
    }
    fclose($haber);
    //arrayi ters cevir ilk elemani sil.
    $haber_ters array_reverse($haberler,false);
    $haber_sil array_shift($haber_ters);
    $kontrol count($haber_ters);
    foreach (
    $haber_ters as $haber_new)
    {
    if (
    gettype($haber_new)!= "boolean" or $haber_new != "")
    {
    //Cif Tek Kontrolu
    $kontrol_bol $kontrol 2;
    if ( 
    gettype($kontrol_bol)== "double" ){
    print (
    "<font class=\"content\">\n");
    print 
    $haber_new;
    print (
    "</font>\n");
    print 
    "<br>\n";
    print 
    "<hr size=\"1\">\n";
    $kontrol--;
    }
    else {
    print 
    "<font class=\"strongred\">\n";
    print 
    $haber_new;
    print 
    "</font>\n";
    print 
    "<br>\n";
    print 
    "<hr size=\"1\">\n";
    $kontrol--;
    }
    }
    }
    print (
    "</tr>"."\n"."</td>"."\n"."</table>\n");

    print(
    "</body>"."\n"."</html>");
    ?>
    Yukarıdaki gibi bir kod yazdım fakat //Dosyayi okut array a ata
    kısmındaki dongu icerisinde explode ile olusturdugum arrayin eleman sayisi hep 1 fazla donuyor arrayin son elemanına baktığımda hep bos oldugunu goruyorum. Bu yuzdende
    //arrayi ters cevir ilk elemani sil. kismindaki kodlari ekledim. arrayi ters cevirmem zaten gerekiyor ama birde ilk elemanı array_shift ile silmek zorunda kaliyorum. yardım ederseniz sevinirim.
     
  2. mkarabulut

    mkarabulut Misafir

    Merhaba Alper,
    Kod:
    $satir = fread($haber, 1024);
    
    Bu kod ile satır alamazsın... Sadece belirttiğin gibi dosyadan - imlecin bulunduğu yerden itibaren 1024 byte alınır, ister içinde \n olsun ister olmasın farketmez..
    Kod:
    $haber_array = explode ("\n", $satir);
    
    İşte bu kod ise alınan 1024 byte lık bilgiyi satırlara göre ayrıştırıp, diziye atıyor. Yani aslında satırlar artık $haber_array içerisinde...

    Bir de her 1024 byte da bir döngü $haber_array dizisini yeniliyor, böylece aslında senin elinde son olarak $haber_array içerisinde dosyanın son 1024 byte'ındaki kayıtlar bulunuyor...

    Bu noktada bi şey sormak istiyorum, yanılıyor da olabilirim.
    * Script düzgün çalışıyor mu ?
    * Kurtulmak istediğin şey sadece array_shift yapmak mı ?

    kusura bakma tam anlamadım sorunuda ... Bu kodların altndaki kontroller ise kafamı karıştırdı,sanırım text dosyanın formatını bilmek gerekiyor yorum yapmak için...

    Sevgiler..
     
  3. mkarabulut

    mkarabulut Misafir

    Bu arada satır satır okuma yapma için şu yöntemi önerebilirim
    Kod:
    while ($satir = fgets ($haber)) {
     ...
    }
    
    Manual'a göre daha güzeli ise şu :
    Kod:
    while (!feof ($haber)) {
        $buffer = fgets($haber, 4096);
        echo $buffer;
    }
    
    
    Veya doğrudan dosyayı açmadan satırlarını almana yarayan fonksiyonu da kullanaiblirsin.

    Kod:
    $satirlar = file ("news.bd");
    
    Tabii önemli olan senin nasıl kolayına geldiğini ve yogurt yeme tarzın :)

    Kolay gelsin ..
     
  4. ab

    ab Aktif Üye

    Kayıt:
    19 Mayıs 2002
    Mesajlar:
    343
    Beğenilen Mesajlar:
    0
    Meslek:
    Oğrenci
    Şehir:
    İstanbul
    Mustafa sağolasın. Script düzgün çalışıyor aslında. Ama yazmak istediğim script soyle.

    Dosyayı acıp icindeki her satırı bir arrayin elemanı olarak atayacağım.

    yani dosya

    a
    b
    c
    d

    satirlarindan olusuyorsa ben bu dosyayı okuttuktan sonra elimde

    $i = ("a", "b", "c", "d");

    seklinde bir arrayin gecemesi sonra bu array i array_reverse ile ters cevirmek istiyorum. Bunun nedeni ise dosya ya en son eklenen bilginin en basa gelmesi.

    daha sonra bu array uzerinden gerekli islemleri yaparak yazdırmak istiyorum. burada sanırım yine explode komutunu kullanmam gerekicek.