Ben başka bir sunucuya taşıdığınızda sayaç çalışmaz

4 Cevap php

Birisi benim sitede, 7 farklı sidebars biri gider, her zaman kadar yükler böylece bir hitcounter kurmak. Hitcounter.txt adlı bir metin dosyasına yazar counter.php adında bir dosya vardır. Dosyaları için tüm başvurular göreli gibi görünüyor ama benim yeni ev sahibi yeni bir dizine taşındığında yerine mutlu bir isabet sayacı bu hata var:

<b>Warning</b>:  fopen(hitcounter.txt) [<a href="function.fopen">function.fopen</a>]: failed to open stream: Permission denied in <b>/usr/local/apache/sites/MY-SITE/counter.php</b> on line <b>5</b><br>

Counter.php aşağıda bütünüyle yapıştırılır, line 5, fopen counter.php hem de eski ev sahibi yaptığımız gibi hitcounter.txt aynı 775 izinleri, ilk referanstır.

Ben yanlış ne yapıyorum? Açıkçası gerçekten basit ve utanç verici bir şey eksik, bu yüzden bana bana yardım ederken herhangi bir küçümseme ya da kötüye vermek için çekinmeyin ediyorum.

counter.php:

<?php
$count_my_page = ("hitcounter.txt");
$hits = file($count_my_page);
$hits[0] ++;
$fp = fopen($count_my_page , "w");
if ($fp) {
fputs($fp , "$hits[0]");
fclose($fp);
}


if($hits[0]<=1)
    {


    $random_number=0;

    }

else if($hits[0]>1 && $hits[0]<=2)
    {


    $random_number=1;

    }


else if($hits[0]>2 && $hits[0]<=3)
    {


    $random_number=2;

    }
else if($hits[0]>3 && $hits[0]<=4)
    {


    $random_number=3;

    }


else if($hits[0]>4 && $hits[0]<=5)
    {


    $random_number=4;

    }

else if($hits[0]>5 && $hits[0]<=6)
    {


    $random_number=5;

    }

else if($hits[0]>6 && $hits[0]<=7)
    {


    $random_number=6;

    }


else if($hits[0]>7 && $hits[0]<=8)
    {


    $random_number=7;

    }


else if($hits[0]>8 && $hits[0]<=9)
    {


    $random_number=8;


    if($hits[0]==9)
    {
    $count_my_page=("hitcounter.txt");
    $fp = fopen($count_my_page , "w");
    $hits[0]=0;
    fputs($fp , "$hits[0]");
    fclose($fp);

    }
    }

?>

4 Cevap

Öncelikle, 775 izinlerine gerek yok. Sen hitcounter.txt 666 izinler gerekir. PHP dosyası 644 olabilir.

Web sunucusu muhtemelen ana bağlı grubunun bir üyesi değildir, bu yüzden 'Herkes grup yazma izinlerini vermek gerekiyordu.

Onlar OS tarafından yürütülmektedir olmadığı için, "Çalıştır" bit klasörler için gerekli değil, fakat tek tek dosyalar için.

Yani biliyorsunuz, 775: Sahibi, Grup Herkes

  • Sahibi = Okuma + Yazma + Yürütme

  • Grup = Okuma + Yazma + Yürütme

  • Herkes = Okuma + Yürütme

666 aracı

  • Sahibi = Okuma + Yazma

  • Grup = Okuma + Yazma

  • Herkes = Okuma + Yazma

644 aracı

  • Sahibi = Okuma + Yazma

  • Grubu = Oku

  • Herkes = Oku

Muhtemelen izinleri ile ilgili bir şey var. 777 ayarlayın ve ne olduğunu görün. Apache kendi izinleriyle çalışır ve bir parçası değilse, bu nedenle olabilir, ama ben birkaç öneri var:

  • Basit okuma file_put_contents / dosya_ get_ içeriğini kullanmak / yazar!
  • Mümkünse yerine, bu sayısız çizgilerin ve bir bonus tüm dosya okuma / yazma kurtulmak gibi $ random_number = rand (0,8) OR mt_rand (0,8) kullanın lütfen

İyi şanslar!

Update

Hiçbir şey güzel bir örnek yener:

<?php 
  $random_number = mt_rand(0,8);
  file_put_contents("hitcounter.txt", $random_number); /* dont know if you still need it */
?>

Eğer gerçekten isterseniz (btw. rastgele değil!) Için:

<?php 
  $file = "hitcounter.txt";
  $number = (int)file_get_contents($file);
  $number = ++$number % 9;
  file_put_contents($file, $number);
?>

777 izinleri ayarlamayı deneyin. Bu işe yaramazsa, ev sahibi olabilir sunucuda dosya işleme izin vermez

Emin bunun bir dönemi (geçerli dizin) sahip olmak için include_path edin. Değil emin niçin öyle değil mi, ama ev sahibi Wonkey olup olmadığını bilemezsiniz. Sen kullanarak bir PHP komut dosyası sizin include path yazdırmak ini_get yapabilirsiniz:

ini_get('include_path');

Bunun dışında, muhtemelen farklı bir dosya izinleri gerekir. İşte file permissions hakkında birçok bilgi açıklayan yararlı bir site.