當前位置: 首頁> 最新文章列表> 通過PHP的umask函數怎麼控制新建文件的默認權限?實例說明

通過PHP的umask函數怎麼控制新建文件的默認權限?實例說明

gitbox 2025-09-16
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 這部分代碼與文章內容無關,僅作為示例開頭</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"歡迎閱讀PHP文件權限控制教程。"</span></span><span>;
</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/*
文章標題:通過PHP的umask函數怎麼控制新建文件的默認權限?實例說明
*/</span>

</span><span><span class="hljs-comment">// PHP中的umask函數用於設置進程的文件權限掩碼,從而控制新建文件或目錄的默認權限。</span></span><span>
</span><span><span class="hljs-comment">// 默認情況下,Linux系統對新建文件的權限一般是0666(rw-rw-rw-),新建目錄是0777(rwxrwxrwx)。</span></span><span>
</span><span><span class="hljs-comment">// umask函数通過屏蔽权限位,限制新建文件或目錄的權限。</span></span><span>

</span><span><span class="hljs-comment">// 例如,umask(0022)表示屏蔽0022對應的權限,即屏蔽組和其他用戶的寫權限。</span></span><span>
</span><span><span class="hljs-comment">// 新建文件的默認權限將是 0666 &amp; ~0022 = 0644 (rw-r--r--)</span></span><span>
</span><span><span class="hljs-comment">// 新建目錄的默認權限將是 0777 &amp; ~0022 = 0755 (rwxr-xr-x)</span></span><span>

</span><span><span class="hljs-comment">// 示例說明:</span></span><span>

</span><span><span class="hljs-comment">// 設定umask值</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0022</span></span><span>);

</span><span><span class="hljs-comment">// 創建一個文件</span></span><span>
</span><span><span class="hljs-variable">$file</span></span><span> = </span><span><span class="hljs-string">'testfile.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-string">"這是一個測試文件。"</span></span><span>);

</span><span><span class="hljs-comment">// 檢查文件權限</span></span><span>
</span><span><span class="hljs-variable">$perms</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fileperms</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>) &amp; </span><span><span class="hljs-number">0777</span></span><span>; </span><span><span class="hljs-comment">// 只取權限位</span></span><span>
</span><span><span class="hljs-title function_ invoke__">printf</span></span><span>(</span><span><span class="hljs-string">"文件 %s 的權限是: %o\n"</span></span><span>, </span><span><span class="hljs-variable">$file</span></span><span>, </span><span><span class="hljs-variable">$perms</span></span><span>);

<span class="hljs-comment">/*
運行結果通常是:
文件 testfile.txt 的權限是: 644

这表明新建文件的權限是rw-r--r--,即所有者可讀寫,組用戶和其他用戶只讀。
*/</span>

</span><span><span class="hljs-comment">// 如果想改變默認權限,可以更改umask值,例如:</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0000</span></span><span>); </span><span><span class="hljs-comment">// 不屏蔽任何權限</span></span><span>

</span><span><span class="hljs-comment">// 創建另一個文件</span></span><span>
</span><span><span class="hljs-variable">$file2</span></span><span> = </span><span><span class="hljs-string">'testfile2.txt'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">file_put_contents</span></span><span>(</span><span><span class="hljs-variable">$file2</span></span><span>, </span><span><span class="hljs-string">"權限更寬鬆的測試文件。"</span></span><span>);

</span><span><span class="hljs-comment">// 檢查新文件權限</span></span><span>
</span><span><span class="hljs-variable">$perms2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">fileperms</span></span><span>(</span><span><span class="hljs-variable">$file2</span></span><span>) &amp; </span><span><span class="hljs-number">0777</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">printf</span></span><span>(</span><span><span class="hljs-string">"文件 %s 的權限是: %o\n"</span></span><span>, </span><span><span class="hljs-variable">$file2</span></span><span>, </span><span><span class="hljs-variable">$perms2</span></span><span>);

<span class="hljs-comment">/*
此時權限通常為666 (rw-rw-rw-),即所有用戶都有讀寫權限。
*/</span>

</span><span><span class="hljs-comment">// 注意事項:</span></span><span>
</span><span><span class="hljs-comment">// 1. umask只影響由當前PHP進程新建的文件或目錄。</span></span><span>
</span><span><span class="hljs-comment">// 2. 已存在文件權限不會被umask影響。</span></span><span>
</span><span><span class="hljs-comment">// 3. web服务器运行用户权限和操作系统安全策略也会影響最终权限。</span></span><span>

</span><span><span class="hljs-comment">// 綜上所述,通過umask函數可以方便地控制PHP中新建文件和目錄的默認權限。</span></span><span>
</span><span><span class="hljs-comment">// 正确設定umask,有助於保證文件安全,避免權限過寬帶來的安全風險。</span></span><span>

</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>