หลายคนอาจเคยประสบปัญหาเกี่ยวกับการสร้างไฟล์ หรือโฟลเดอร์บน Linux ด้วยคำสั่ง PHP เช่น mkdir ซึ่งถึงแม้จะกำหนด Permission ในขั้นตอนการสร้างให้เป็น 0777 แล้ว แต่พอไปดูที่ Folder จริงจะไม่เป็นไปตามที่กำหนดอาจจะเห็นเป็น rwxr-xr-x หรือ 0755 นั่นเอง ปัญหาที่เกิดขึ้นนี้มักสร้างปัญหาในกรณีที่มีการสร้าง Folder ที่ใช้ร่วมกันในหลาย Server ซึ่งอาจทำให้ Server อื่นไม่สามารถเขียนไฟล์ทับ หรือเขียนลงใน Folder ได้นั่นเอง ปัญหานี้เกิดจากใน Linux จะมี umask ซึ่งเป้นเครื่องมือในการ mask permission ก่อนการเขียนไฟล์หรือโฟลเดอร์ใน Linux นั่นเอง ซึ่งเราสามารถดูได้ว่าปัจจุบัน umask ในเครื่องเป็นเท่าไรเพียงรันคำสั่ง umask ก็จะเห็น โดยส่วนใหญ่จะเป็น 022 ซึ่งเมื่อนำไป mask กับ 777 ก็จะได้เป็น 777 - 022 = 755 นั่นเอง วิธีการแก้ไขสามารถทำได้โดยก่อนสร้างไฟล์หรือโฟลเดอร์ให้ทำการเปลี่ยน umask ให้เป็น 0 แล้วจึงใช้คำสั่งเขียนไฟล์หรือโฟลเดอร์นั่นเอง เช่น
1
2
3
4
5
6
7
8
9
10
| <?php
$old = umask(0);
chmod("/path/some_dir/some_file.txt", 0777);
umask($old);
// Checking
if ($old != umask()) {
die('An error occurred while changing back the umask');
}
?>
|
1
2
3
4
5
6
7
8
9
10
| <?php
$old = umask(0);
mkdir("/path/to/my/dir", 0777);
umask($old);
// Checking
if ($old != umask()) {
die('An error occurred while changing back the umask');
}
?>
|
Comments
Post a Comment