簡體   English   中英

php mkdir() chmod 和權限

[英]php mkdir() chmod and permissions

我正在使用這個基本腳本:

$folderPath = "../path/to/$folder/";
mkdir("$folderPath");

我創建這個目錄,然后上傳照片到它。 我已經這樣做了 4-5 個月了,當我嘗試通過網絡瀏覽器查看文件夾的內容時,突然間我開始收到“禁止”錯誤

目錄創建相同,照片仍在上傳沒有問題,但我無法訪問照片

我嘗試重寫腳本並使用 chmod 來更改權限,但我一點運氣都沒有

使用以下命令創建所有較舊的文件夾:-w- rwx rx rx

我無法重新創建它

我試過在我的腳本中添加一個 chmod 行:

$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

但我無法重新創建相同的權限,我試圖了解 chmod 的工作原理,但我無法弄清楚如何讓這個非常基本的功能再次正常工作

嘗試查找 HTAccess 文件,其中將提到“Options -Indexes”選項,因為這主要用於不在 Web 瀏覽器中顯示文件夾的內容。 該文件需要按以下方式搜索:-

  • 在文件夾“ root_folder/sales/inventory/$folder/ ”中,其中“ $folder ”在您的代碼中提到。
  • 如果未找到,請在文件夾“root_folder/sales/inventory/”中嘗試。
  • 如果未找到,請在文件夾“root_folder/sales/”中嘗試。
  • 如果未找到,請在文件夾“root_folder/”中嘗試。

當您獲得 HTAccess 文件中寫入的“Options -Indexes”代碼時,您可以從那里刪除/注釋該行代碼,或者您也可以在“ $folder ”所需的文件夾中編寫另一個 HTAccess 文件,其中代碼將是“選項索引”。

同樣在PHP頁面中,邏輯必須是這樣的:-

<?php
$folderPath = "../sales/inventory/$folder/";
mkdir("$folderPath");
chmod("$folderPath", 0755);

// Use of "copy()" / "move_uploaded_file()" function here, using some "$targetFile" variable.
chmod($targetFile, 0755);
?>

當您從“$folder”文件夾中取消鏈接/刪除上傳的文件時,這將對您有所幫助。

希望它有幫助。

如果您的 $folder 變量包含一些子目錄,您的父目錄可能沒有被修改為正確的權限。 這是我在租用的 OVH Gentoo 服務器上遇到的問題。

想象一下$folder = '/store1/ally23/shelf42'; 所以你的最終目錄結構是../sales/inventory/store1/ally23/shelf42 ,你需要0777 ../sales/inventory/store1/ally23/shelf42 你這樣做:

mkdir($folderPath, 0777, true) || chmod($folderPath, 0777);

只有最終目錄shelf42被修改為0777 中間目錄是使用默認權限創建的(在我的例子中是0744 )。

PHP 的 chmod 命令中沒有遞歸選項,因此您必須遍歷中間目錄並單獨對它們進行 chmod。

如果您在共享環境中,為了安全起見,您可能還想在上傳后chown 特別是如果您在虛擬主機以外的用戶下運行您的 Web 服務器有權訪問(例如:“nobody”與“mysite”。)這在 cPanel 服務器中很常見,FWIW。

簡單的 umask 意味着新文件/目錄的默認權限:

<?php
 umask(022);
?>

這分別為用戶、組和其他人設置了默認權限:

  • 0 - 讀、寫和執行
  • 1 - 讀寫
  • 2 - 讀取和執行
  • 3 - 只讀
  • 4 - 編寫和執行
  • 5 - 只寫
  • 6 - 只執行
  • 7 - 沒有權限

暫無
暫無

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

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