当我将它移动到另一台服务器时,计数器将无法工作

时间:2009-06-23 22:52:22

标签: php file-io deployment fopen

我设置了一个hitcounter,这样每次有人进入我的网站时,7个不同侧边栏中的一个会加载。有一个名为counter.php的文件,它写入一个名为hitcounter.txt的文本文件。所有对文件的引用似乎都是相对的,但当我将它们移动到我的新主机的新目录时,我得到了这个错误,而不是一个快乐的点击计数器:

  

警告:fopen(hitcounter.txt)[ function.fopen ]:无法打开流: / usr / local / apache / sites中的权限被拒绝/MY-SITE/counter.php 在线 5

Counter.php全部粘贴在下面,第5行是fopen的第一个引用,counter.php和hitcounter.txt都有775个权限,与旧主机上的权限相同。

我做错了什么?我显然错过了一些非常简单和令人尴尬的事情,所以在帮助我的时候随意给我任何蔑视或虐待。

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 个答案:

答案 0 :(得分:2)

它可能与权限有关。将其设置为777,看看会发生什么。如果apache以自己的权限运行并且不是你的一部分可能是原因,但我有几个建议:

  • 使用file_put_contents / file_ get_ contents进行简单的读/写操作!
  • 请使用$ random_number = rand(0,8)或mt_rand(0,8),如果可能的话,而不是这些无数行,并作为奖励摆脱所有文件读/写
祝你好运!

<强>更新

没有什么比这更好的例子了:

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

如果你真的想(顺便说一下,不要随意!):

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

答案 1 :(得分:1)

首先,您不需要775权限。您需要在hitcounter.txt上拥有666权限。 PHP文件可以是644。

Web服务器可能不是该组的成员,具体取决于主机,因此您需要为“Everyone”组授予写入权限。

文件夹需要“执行”位,但个别文件不需要,因为操作系统不会执行这些操作。

所以你知道,775是:所有者,团体,每个人

  • 所有者=读取+写入+执行

  • 组=读取+写入+执行

  • 每个人=阅读+执行

666表示

  • 所有者=读取+写入

  • 群组=读取+写入

  • 每个人=读取+写入

644表示

  • 所有者=读取+写入

  • 群组=阅读

  • 每个人=阅读

答案 2 :(得分:0)

尝试设置777的权限。如果这不起作用,可能是您的主机不允许在服务器上进行文件操作

答案 3 :(得分:0)

检查include_path以确保其中包含句点(当前目录)。不知道为什么它不会,但你永远不知道你的主人是否胜利。您可以使用ini_get

从PHP脚本打印出include path
ini_get('include_path');

除此之外,您可能需要不同的文件权限。这是一个有用的网站,描述了file permissions上的大量信息。