2010-09-21 114 views
6

我就是用這個基本的腳本的權限:PHP的mkdir()chmod和

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

我創建這個目錄,然後把照片上傳到它。我已經這樣做了4-5個月,現在突然間,當我嘗試通過網絡瀏覽器查看文件夾的內容時,突然出現「FORBIDDEN」錯誤。

該目錄正在創建相同,照片仍在上傳沒有問題,但我不能訪問

我試圖重寫劇本,用chmod更改權限,但我有所有

所有較大的文件夾沒有運氣正在使用創建的照片

:-w- rwx rx rx

我無法得到這個重新創建

我嘗試添加在chmod線到我的腳本:

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

,但我不能重新創建相同的權限,我想了解如何搭配chmod的作品,但我無法弄清楚如何以獲得這個非常基本的功能再次正常工作

+2

接受一些答案,如果你想讓人們幫你 – Galen 2010-09-21 22:32:38

+0

這種代碼令我不安,你是否在過濾'$ folder'?如果不是的話,那將是我第一次猜測它爲什麼會停止,一個潛在的安全漏洞。 – 2010-09-21 22:34:35

+0

這不是我在$文件夾中有過濾器的整個腳本 – Thomas 2010-09-21 22:37:01

回答

9

嘗試尋找一個HTAccess文件,其中「選項 - 索引」選項將被提及,因爲這主要用於不顯示在Web瀏覽器中的文件夾的內容。該文件需要通過以下方式進行搜索: -

  • 在文件夾「root_folder/sales/inventory/$folder/」,其中「$folder」是你在代碼中提到。
  • 如果找不到,請嘗試在「root_folder/sales/inventory /」文件夾中。
  • 如果找不到,請在文件夾「root_folder/sales /」中嘗試。
  • 如果找不到,請在文件夾「root_folder /」中嘗試。

當你拿到「選項-Indexes」寫在.htaccess中文件的代碼,你可以刪除/發表評論該行代碼從那裏,或者你也可以另寫的.htaccess文件在您需要的「$folder文件夾「,其中代碼將是」選項索引「。

另外在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); 
?> 

這將幫助你時,你會被斷開鏈接/從「$文件夾」文件夾刪除上傳的文件。

希望它有幫助。

+0

感謝您的幫助,這確實有幫助,但我仍然遇到了反映插入腳本的實際權限的問題,例如您的例子工作正常,除了當我看從目錄樹的權限時,創建的$文件夾不是rwx rx rx應該是預期的,而是出現作爲rwx rx --- – Thomas 2010-09-22 15:18:39

+0

第二想到我只是重讀你說,我一定錯過了最後的上傳文件部分的chmod,我試圖將其添加到上傳腳本,它工作正常。我真的很感謝所有幫助似乎都能正常工作,現在我只是無法弄清楚爲什麼這首先打破了 – Thomas 2010-09-22 17:28:53

+0

@ thomas - 這是一個共同的部分,我也做了這個錯誤的事情,當我自己是一個新鮮。所以沒有什麼可擔心和振作! **最好的運氣!!! ** – 2010-09-22 18:43:04

2

如果您處於共享環境中,則上傳後您可能還想要chown以保證安全。特別是如果你在虛擬主機以外的用戶下運行你的Web服務器有權訪問(EG:「nobody」vs「mysite」)。這在cPanel服務器FWIW中很常見。

6

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

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

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

只有最終目錄shelf42被chmoded到0777。中間目錄是使用默認權限創建的(在本例中爲0744)。

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

+0

我試過'mkdir($ folderPath,777)',它沒有工作。我意識到這是由於[權限不正確](http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/)。正如注意,777之前的0非常重要。 – 2017-12-07 15:23:08