簡體   English   中英

在php中更改目錄權限(chmod)

[英]change directory permission (chmod) in php

我已經用谷歌搜索,但似乎無法使我的腳本正常工作。

這是我的代碼

if (is_dir("tmp")) {
    if (substr(sprintf("%o", fileperms("tmp")), -4) == "0777") {
        echo "good";
    } else {
        echo "going to chmod the tmp folder to 777";
        if (!chmod("tmp", octdec(0777))) { // tried chmod("tmp, 0777) too
                echo "Oops, I couldn't chmod the /setup/tmp directory, please do this manually";
        }
    }
} else {
    echo "we'll make the folder";
}

我似乎無法使chmod正常工作,我在某處讀到,如果關閉了寄存器全局,那么這將不起作用(我將該設置設置為off)。

我遵循了PHP.net手冊及其在用戶注釋中提供的一些示例,以及一些我認為相關的堆棧溢出帖子。 但也許我需要調整一些PHP設置才能使它正常工作?

有沒有一種方法可以使chmod函數正常工作而無需更改PHP.ini?

代表這樣:-

chmod("tmp", 0777);

您沒有給我們足夠的信息來確定chmod()失敗的原因。 網絡服務器可能沒有足夠的特權來更改目錄權限。

Web服務器進程的所有者應擁有目錄或成為擁有組的成員。 例如,如果root擁有tmp ,並且您的Web服務器以“ apache”用戶身份運行,則無法從PHP修改目錄的權限。

我相信您在php.ini中提到的設置用於調試,而不是神奇地“修復” chmod 嘗試將以下代碼行添加到PHP腳本中,您將獲得更多有用的調試輸出:

ini_set('display_errors', 'On');
error_reporting(E_ALL)

運行php守護程序或Web服務器守護程序的用戶必須對您嘗試使用chmod的目錄具有寫權限。 以我為例,www-data是運行php的用戶,而php嘗試運行的任何命令都將以www-data用戶身份運行。

如果使用php mkdir函數創建目錄,則會注意到該目錄的所有者是運行php或webserver守護程序的人。 而且任何由php創建的目錄,php都可以chmod,chown對其執行任何操作,因為它是所有者。

你可以

  1. 整理目錄,以便所有者是php用戶
  2. 為該組設置寫權限,並將該組設置為與php用戶相同的組
  3. 做一些類似向php用戶授予sudo特權的操作,不建議這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM