العداد لا تعمل عندما نقله إلى ملقم آخر
-
10-07-2019 - |
سؤال
أقوم بإعداد 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');
بخلاف ذلك ، ربما تحتاج مختلفة أذونات الملف.هنا موقع مفيد تصف الكثير من المعلومات عن أذونات الملف.