ชื่อผู้แจ้ง : ชื่อผู้แจ้งข่าว admin     สถานีฯ admin      เวลาที่แจ้งข่าว แจ้งวันที่ : 21 มีนาคม 2562 เวลา 17:59:18      ถูกเปิดอ่านแล้ว 48 ครั้ง  48 / 0 ครั้ง   ลดขนาดตัวอักษร ลดขนาดตัวอักษร 
ประเภท : [ บทความ ]      ออกแบบเว็บไซต์      ภาษา php      ภาษา php
ชื่อเรื่อง :

ใช้คำสั่ง PHP ตรวจสอบ permissions และเปลี่ยน chmod ไฟล์หรือโฟลเดอร์



บทเรียนรู้ที่มีประโยชน์กับเรา เราก็มาโพสต์ไว้เตือนความจำสิฮ่าบ

เราใช้งาน FTP อัพโหลดไฟล์ แล้วไปเจอการกำหนดค่า permissions ใน Server เป็น chmod 0755 ไม่สามารถแก้ไขไฟล์ข้อมูลต่างๆในโฟลเดอร์นั้นได้ และไม่สามารถใช้เครื่องมือ FTP เปลี่ยน chmod ให้เป็น 0777 ได้ เพราะติดสิทธิ์ผู้ใช้งาน permissions เป็นของ Apache Server เราไม่สามารถเข้าไปแก้ไขได้

เรามีวิธีปัญหานี้ โดยใช้คำสั่ง PHP Script เป็นตัวช่วยในการเปลี่ยนค่า chmod ให้เป็น 777

>> เราตั้งค่า Chmod = 0755 ให้โฟลเดอร์ manual เพื่อไม่ให้ผู้อื่นเปิด URL มาโหลดไฟล์เราได้ตรงๆ

>> แล้วตอน Admin ติดตั้ง Server ใหม่ ทำให้ Apache Server กำหนดค่า permissions ของโฟลเดอร์นั้น มีผู้ใช้งานเป็นของ Admin ผู้เดียว

>> เพราะสิทธิ์เป็นของ Apache Server จึงทำให้ผู้ใช้งาน Web FTP อื่น ไม่สามารถใช้เครื่องมือ FTP เข้าไปแก้ไขสิทธิ์ในโฟลเดอร์ manual นั้นได้

>> จึงต้องใช้ PHP script เปลี่ยนแปลงค่า Chmod เป็น 0777 เพื่อให้ FTP คัดลอก, ย้าย, เปลี่ยนไฟล์ , เปลี่ยนชื่อไฟล์ ได้ 

>> เมื่อแก้ไขไฟล์เสร็จเรียบร้อยแล้ว จึงเปลี่ยนกลับมาเป็น Chmod = 0755 ดั่งเดิม เพื่อความปลอดภัย







permission denied สิทธิ์การใช้งานของท่าน ถูกปฏิเสธ





ตรวจดูสิทธิ์ permissions เป็นของ Apache Server





ก่อนอื่นต้องใช้คำสั่ง PHP ตรวจสอบ permissions และ chmod

ฟังก์ชัน fileperms()
อ่านข้อมูล permissions ของไฟล์ หรือ โฟลเดอร์

รูปแบบการอ่านข้อมูล permissions ของโฟลเดอร์
fileperms(foldername)  โดย foldername คือที่อยู่โฟลเดอร์

ตัวอย่าง
echo fileperms("path");



<?php

$path = "manual";

echo "permissions folder <b>$path</b>= ".fileperms($path);
echo "<br>";
echo "CHMOD folder <b>$path</b>= ".substr(sprintf('%o', fileperms($path)), -4);

?>


fileperms($path) >> แสดงค่า permissions
substr(sprintf('%o', fileperms($path)), -4) >> แสดงค่า Chmod





แล้วใช้ฟังค์ชั่น chmod($path,0777) เพื่อเปลี่ยน ค่า chmod


<?php

$path = "manual";

echo "permissions folder <b>$path</b>= ".fileperms($path);
echo "<br>";
echo "CHMOD folder <b>$path</b>= ".substr(sprintf('%o', fileperms($path)), -4);
echo "<br><br>";

if(chmod($path,0777)){ // เปลี่ยนค่า chmod ที่นี่  เช่น 0777 , 0755
echo "Change CHMOD <b>Successful</b>";
}else{
echo "NOT Change CHMOD";
}

sleep(1);
echo "<br>NEW CHMOD folder <b>$path</b> = ".substr(sprintf('%o', fileperms($path)), -4);

?>





ผลที่ได้ เมื่อเปิดดูค่า Properties ของโฟลเดอร์ manual จะสามารถตั้งค่า chmod = 0777 เรียบร้อยแล้ว



จัดทำโดย คณะเจ้าหน้าที่บริษัท อสมท จำกัด ( มหาชน ) ผู้มีโอกาสเข้าร่วมอบรมเทคโนโลยีดิจิตอล ณ ประเทศญี่ปุ่น