คือผมมีปัญหาในการใช้คำสั่งนี้ครับผม
mkdir (folder, 0777);
//อันนี้สร้าง folder ได้แต่กำหนด permission เป็น 777 ไม่ได้
//เลยเปลี่ยนมาเป็นแบบนี้ครับ
mkdir (folder);
chmod (folder, 0777);
//อันนี้สร้าง folder ได้กำหนด permission เป้น 777 ได้
ไม่ทราบว่าเกี่ยวกับการตั้งค่าใน php.ini หรือเปล่าครับผม ช่วยให้ชี้แนะด้วยครับผม
ขอบคุณครับ
kke
June 26, 2006, 1:39pm
2
มาทักทายครับ หายไปนานเลยนะครับ
น่าจะเป็นผลจาก umask นะครับ
ตอนใช้คำสั่งแรก permission ออกมาเป็น 755 ใช่ไหมครับ (umask=022)
ลองอ่าน function umask ดูครับ
ใช้ครับผม…
แล้วเป็นที่คำสั่ง php หรือต้องปรับแต่งที่ host ครับผม
ผมว่า topic เป็นประโยชน์ นะครับ น่าจะทำอะไรให้เห็นชัดเจนหน่อย
kke
June 27, 2006, 2:29am
6
ทดสอบแล้ว สรุปคือต้องตั้งค่า umask ร่วมด้วยครับ
<?php
$path = “/home/---------/public_html/”;
echo “Test mkdir with Umask
”;
mkdir ($path.“new1”); chmod ($path.“new1”, 0777);
mkdir ($path.“new2”); chmod ($path.“new2”, 0775);
mkdir ($path.“new3”); chmod ($path.“new3”, 0755);
// ได้ผลถูกต้องเพราะสร้างแล้วมา chmod ทีหลัง จึงไม่เกี่ยวว่าตอนสร้างได้ permission อะไร
// default umask 022
mkdir ($path.“new4”, 0777); // ได้ 755 เพราะติด mask 22
mkdir ($path.“new5”, 0775); // ได้ 755 เพราะติด mask 22
mkdir ($path.“new6”, 0755); // ได้ 755 เพราะติด mask 22
// 2 ตัวหลังจะได้เป็น 5 เสมอ เพราะติด mask 22
umask (002);
mkdir ($path.“new7”, 0777); // ได้ 775 เพราะติด mask 2
mkdir ($path.“new8”, 0775); // ได้ 775 เพราะติด mask 2
mkdir ($path.“new9”, 0755); // ได้ 755 เพราะติด mask 2
// ตัวสุดท้ายจะได้เป็น 5 เสมอ เพราะติด mask 2
umask (0);
mkdir ($path.“newA”, 0777); // ได้ 777 เพราะไม่ติด mask
mkdir ($path.“newB”, 0775); // ได้ 775 เพราะไม่ติด mask
mkdir ($path.“newC”, 0755); // ได้ 755 เพราะไม่ติด mask
// ได้ผลถูกต้องเพราะ mask เป็น 0
echo “Done”;
?>
สรุปคือเพิ่ม umask (0); ก่อนเรียกใช้งาน mkdir หลายๆอันครับ
แต่ถ้าสร้างแค่ folder เดียว ใช้ chmod เอาทีหลังชัวร์และแน่นอนกว่า
ถ้าต้องการสร้างหลายๆ folder ก็ใช้ umask เอา (ค่า umask ไม่เก็บไว้นะครับ ต้องเรียกใหม่ทุกครั้งที่เรียก script)
ปล. อย่าลืม +1 นะ
:wub: ขอบคุณมากครับ +1 ให้แล้วนะครับผม
อีกหน่อยนะครับผม
$home = "/home/.../www/html/folder/";
$home_sub = "/home/.../www/html/folder/subfolder/";
umask (0);
mkdir($home, 0777);
mkdir($home_sub, 0777);
ผลที่ได้คือ สร้าง folder ได้ permission 777 ได้ แต่สร้าง subfolder ไม่ได้ครับผม
พอจะเดาปัญหาได้มั้ยครับผมว่าเป็นเพราะอะไรครับผม
ขอบคุณครับ
แหม เยี่ยมครับ สมกับความเก่า
kke
June 27, 2006, 2:19pm
11
ขอบคุณสำหรับ +1 จากทุกท่านนะครับ
:wub: ขอบคุณมากครับ +1 ให้แล้วนะครับผม
อีกหน่อยนะครับผม
$home = "/home/.../www/html/folder/";
$home_sub = "/home/.../www/html/folder/subfolder/";
umask (0);
mkdir($home, 0777);
mkdir($home_sub, 0777);
ผลที่ได้คือ สร้าง folder ได้ permission 777 ได้ แต่สร้าง subfolder ไม่ได้ครับผม
พอจะเดาปัญหาได้มั้ยครับผมว่าเป็นเพราะอะไรครับผม
ขอบคุณครับ
owner ของ folder เป็นอะไรครับ ถ้าเป็น apache/nobody แต่
/home เป็นของ user อาจ mkdir ต่อไม่ได้
เพราะ safe_mode on อยู่
ตามที่คุณ kke แนะนำลอง run แล้วได้ผลเหมือนเดิมครับผม umask ก็เป็น 0 แต่ยังสร้าง subfolder ไม่ได้เหมือนเดิมครับผม
จะตรวจสอบอย่างไรครับผม หรือจะแก้ไขอย่างไรครับผม
kke
June 27, 2006, 4:11pm
14
ลองใช้ ftp ดู file owner ครับ
เพราะ folder และ files ที่สร้างด้วย php จะมี fileowner เป็น apache, www, nobody อย่างไดอย่างหนึ่ง
แล้วถ้า safemode=on ก็จะติดปัญหาสร้าง folder ต่อไม่ได้ตามที่พี่ pizzaman บอกครับ
ถ้ายังไงเลี่ยงไปใช้ chmod น่าจะดีที่สุดครับ
โฮสผมเลยใช้ php ในโหมด cgi เพื่อให้ file ต่างๆที่สร้างด้วย php จะเป็น owner เดียวกับ user เรา ตัดปัญหาเรื่อง file permission ไปได้เยอะเลย
subfolder ต้องสร้างได้ซิครับ ในเมือ folder ก่อนหน้าสร้างได้แล้วก็เป็น 777 ด้วย ข้างในต้องเขียนได้หมดทุกคนรวมถึง apache
ถ้า safemode=on อยู่ เราจะไม่สามารถสร้าง subfolder ใน folder ที่เราใช้ script php สร้างขึ้นมา และจะไม่สามารถ สร้าง file ใน folder นั้นได้ ใช่มั้ยครับผม
แล้วการเปลี่ยน safemode จาก on เป็น off หรือ 0 มีผลกระทบรุ่นแรงมั้ยครับ แล้ว host ส่วนใหญ่จะยอมเปลี่ยนมั้ยครับผม
ลองค้นๆ
http://th2.php.net/mkdir
Note: When safe mode is enabled, PHP checks whether the directory in which you are about to operate has the same UID (owner) as the script that is being executed.
คงต้องเขียน code ทดสอบครับ รู้กันไปเลย
และใน url ที่ให้ มีหลายคนบอกว่า จะ mkdir ได้ ต้องเข้าไปอยู่ที่ folder นั้นก่อนสร้าง subfolder
เช่นนายคนนี้
While researching for this function, I have found out that - at least on my system - mkdir only works when the parent directory is the one your script is in.
eg:
you want to create a directory tmp
mkdir (‘tmp’, 0775);
will create /path/to/your/script/tmp
but if you this
mkdir (‘/path/to/your/tmp’, 0755);
or
mkdir (‘…/tmp’, 0755);
both will cause an error - permission denied.
บังเอิญผมไม่ใช่ php programmer เสียด้วย เลยบอกไม่ได้ครับ ต้องทดสอบดู คงไม่ยากเกินนะครับ
ถึงแม้จะยังแก้ไขปัญหาไม่ได้ แต่ต้องขอขอบคุณทุกคำแนะนำมาก ๆ เลยนะครับ
ลองค้นๆ
http://th2.php.net/mkdir
คงต้องเขียน code ทดสอบครับ รู้กันไปเลย
และใน url ที่ให้ มีหลายคนบอกว่า จะ mkdir ได้ ต้องเข้าไปอยู่ที่ folder นั้นก่อนสร้าง subfolder
เช่นนายคนนี้
บังเอิญผมไม่ใช่ php programmer เสียด้วย เลยบอกไม่ได้ครับ ต้องทดสอบดู คงไม่ยากเกินนะครับ
ลองแล้วครับไม่ได้ ผมได้ดูรายละเอียดเพิ่มเติมได้ความมาว่า ถ้า safemod ทำงาน