سؤال

أقوم بإعداد hitcounter بحيث في كل مرة شخص يذهب إلى موقعي ، واحدة من 7 الجانبية مختلفة الأحمال.هناك ملف يسمى counter.php أن يكتب إلى ملف نصي يسمى hitcounter.txt.جميع الإشارات إلى الملفات يبدو أن النسبية ولكن عندما انتقلت بهم إلى دليل جديد على استضافة حصلت على هذا الخطأ بدلا من سعيد عداد:

تحذير:fopen(hitcounter.txt) [وظيفة.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);
        }
    }
?>
هل كانت مفيدة؟

المحلول

أولا, أنت لا تحتاج إلى 775 الأذونات.تحتاج 666 الأذونات على hitcounter.txt.ملف PHP يمكن 644.

ملقم ويب ربما ليست عضوا في المجموعة ، اعتمادا على المضيف ، لذا عليك أن تعطي 'الجميع' مجموعة أذونات الكتابة.

"تنفيذ" بت هناك حاجة إلى مجلدات ولكن ليس على الملفات الفردية ، حيث لم يتم تنفيذها من قبل نظام التشغيل.

حتى تعرف ، 775 هو :مالك مجموعة الجميع

  • مالك = قراءة + كتابة + تنفيذ

  • المجموعة = قراءة + كتابة + تنفيذ

  • الجميع = قراءة + تنفيذ

666 يعني

  • مالك = قراءة + كتابة

  • المجموعة = قراءة + كتابة

  • الجميع = قراءة + كتابة

644 يعني

  • مالك = قراءة + كتابة

  • المجموعة = قراءة

  • الجميع = قراءة

نصائح أخرى

ربما قد تفعل شيئا مع الأذونات.تعيين إلى 777 ونرى ما سيحدث.إذا apache يعمل مع الأذونات الخاصة و ليست جزء من هذا قد يكون السبب, ولكن لدي بعض الاقتراحات:

  • استخدام file_put_contents/file_ get_ محتويات بسيطة قراءة/يكتب!
  • الرجاء استخدام $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);
?>

حاول إعداد أذونات 777.إذا كان هذا لا يعمل, يمكن أن يكون المضيف الخاص بك لا تسمح معالجة ملف على الخادم

تحقق include_path للتأكد من أنها فترة (الدليل الحالي) في ذلك.لست متأكدا لماذا لن ، ولكن أنت لا تعرف أبدا إذا كان المضيف هو wonkey.يمكنك طباعة include path من PHP النصي باستخدام ini_get:

ini_get('include_path');

بخلاف ذلك ، ربما تحتاج مختلفة أذونات الملف.هنا موقع مفيد تصف الكثير من المعلومات عن أذونات الملف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top