PHP: تحديد الأذونات حتى أتمكن من كتابة ملف؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

أحاول إنشاء ملف مع PHP هنا هو الرمز الخاص بي:

$file_to_send = 'ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

هذا يعطيني بوضوح خطأ لأنني أحاول ضبط الأذونات على ملف غير موجود بعد. على الرغم من أنني إذا قمت بتخطي دعوة ChMOD، أحصل على خطأ آخر أخبرني أنني لا أملك مجموعة أذونات. إما إما أنا في دورة دجاج مريضة مقابل بيضة أو أحتاج إلى تعيين الأذونات الموجودة على الدليل المحتوي على ... ولكن كيف؟ حاول كل ما تباطؤ:

chmod('../containingfolder/', 0777);
chmod('../', 0777);
chmod('', 0777);

لا أحد يعمل ... ماذا يجب أن أفعل؟ أوه وبالمناسبة بمجرد انتهائي هل أحتاج إلى تغيير الأذونات مرة أخرى؟

شكرا!

تحديث حاولت chmod ('.'، 0777) وهذا هو الخطأ الذي حصلت عليه:

Warning: chmod(): Operation not permitted

السبب الوحيد الذي أحاول جعل هذا الملف هو حتى أتمكن من ftp هو في مكان آخر، ثم خططت لإلغاء انتظار () ذلك. لذلك إذا كان هناك طريقة أفضل؟ مثل ربما تخزين الملف في الذاكرة لإرساله (لا أعرف إذا كان ذلك ممكنا)؟ أيضا أنا أستخدم PHP4. شكرا!

هل كانت مفيدة؟

المحلول

قم بإنشاء دليل خارج جذر المستند الخاص بك الذي سنصل إليه $tmpFolder تأكد من أن المستخدم الذي يعمل عليه خادم الويب هو أذونات القراءة / الكتابة إليها. ثم ما يلي:

$file_to_send = $tmpFolder . '/ftp_test_from_created_file.txt';
chmod($file_to_send, 0777);
$fh = fopen($file_to_send,'w');
$tsv_line = 'Hey\tThese\tAre\tTab\tSeperated\tValues';
fwrite($fh, $tsv_line);
fwrite($fh, '\n');
$tsv_line = 'Hey\tThese\tAre\tToo';
fwrite($fh, $tsv_line);
fclose($fh);

نصائح أخرى

قد يكون ذلك أيضا أن خادم Apache يعمل (إذا كان Apache) ليس لديه حق الوصول إلى تغيير الأذونات على هذا الدليل. يمكن أن يكون له الجذر / الجذر كمستخدم / مجموعة وأباتشي يعمل على مجموعة Apache أو WWWUSER أو أي شيء آخر.

أ ls -l على الدليل الأصلي ومعرفة ما المستخدم والمجموعة لديه حق الوصول إلى هذا المجلد.

لتغيير إذن الدليل الحالي، استخدم

chmod('.', PERMISSION);

هل تحتاج حقا إلى 0777، أي العالم للقراءة والكتابة؟ يبدو lax جدا بالنسبة لي!

يحرر: اقتراحك chmod ('.. / يحتوي على المودد /'، 0777)؛ يجب أن تعمل أيضا. هل يمكن أن تكون أكثر سرعة على الأخطاء التي تحصل عليها؟

لا يمكنك تعيين أذونات إدخال إذا كان المستخدم قيد التشغيل PHP لا يمكن تعديله. انظر إلى Apache's Config، ابحث عن المستخدم الذي يعمل به (افتراضيا) بيانات www-data). لتجنب هذه في المستقبل، ضع نفسك على نفس المجموعة كمجموعة افتراضية، وإعطاء المستند جذر chmod -r g + a

إذا كان المستخدم الحالي يمكنه الكتابة إلى الدليل، فيجب أن تكون قادرا على تبسيط كل ذلك file_put_contents().

<?php
$file = 'file_to_write.txt';
$data = "Tab\tseparated\tvalues\nMore\tseparated\tvalues";
file_put_contents($file);

إذا لم يكن لديك أذونات للكتابة إلى الدليل الحالي (أو أي دليل) فلن تتمكن من إنشاء الملف، ناهيك chmod هو - هي.

إذا كنت تستطيع نشر الأخطاء التي تحصل عليها من chmod() الأوامر التي من شأنها أن تساعد.

chmod('.',0777);

يجب أن تعمل.

إذا كنت ترغب في الحفاظ على جيل Chroot، فلما تحتاج إلى امتيازات chmod الدليل الحالي، فسيتعين عليك معرفة كيفية استخدام Sudo مع خيار -S وأنابيب كلمة مرور الجذر إلى Stdin من أجل الحصول على امتياز.

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