لماذا أحصل على "رفض إذن" في PHP عند محاولة إعادة تسمية الدليل؟

StackOverflow https://stackoverflow.com/questions/196114

  •  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));

ونرى ما تقوم بإرجاع.

وآخر شيء يمكن أن تساعد مثل هذه الحالات هو محاولة الواقع أذونات خفض. رأيت مناسبات حيث ينفي اباتشي على إذن التطبيق أن تفعل شيئا لأنه يتم تعيين الأذونات الخاصة به جدا <م> مرتفع . تخميني هو أن هذا هو تشجيع الممارسات الأمنية الجيدة.

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