لماذا أحصل على "رفض إذن" في PHP عند محاولة إعادة تسمية الدليل؟
-
10-07-2019 - |
سؤال
وأنا chmod'ed الدليل إلى 777، واحد مع محتويات الدليل. لا يزال، والحصول على "إذن نفى" خطأ. هل رمي PHP هذا الخطأ إذا اباتشي ليست مجموعة / المالك، بغض النظر عن أذونات الملف؟ وإليك هذه الدعوة وهذا ما الفاشل:
rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
المحلول
وأنت تقوم بتحرير الدليل مستوى أعلى، لذلك يحتاج المستخدم PHP لديك حق الوصول إلى هذا الدليل.
نصائح أخرى
وولهذا ربما لأن اباتشي ليس صاحب الدليل الأصل. إعادة تسمية (أو نقل) ملف هو في الأساس نفس الشيء إنشاء ملف جديد.
وتوضيح، ووردبريس يمكن إعادة تسمية فقط الدلائل لديها ملكية الفعلية على:
-rwxrwxrwx user user temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user user script.php
وتحمل script.php تحاول إعادة تسمية هذه الدلائل اثنين:
// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions
rename('temp', 'temp.bak');
// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak');
وحاول تشغيل البرنامج النصي التالي:
print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));
ونرى ما تقوم بإرجاع.
وآخر شيء يمكن أن تساعد مثل هذه الحالات هو محاولة الواقع أذونات خفض. رأيت مناسبات حيث ينفي اباتشي على إذن التطبيق أن تفعل شيئا لأنه يتم تعيين الأذونات الخاصة به جدا <م> مرتفع م>. تخميني هو أن هذا هو تشجيع الممارسات الأمنية الجيدة.