2010-09-21 16 views
6

tôi đã sử dụng kịch bản cơ bản này:php mkdir() chmod và quyền

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

tôi tạo thư mục này và sau đó tải ảnh lên nó. Tôi đã làm điều này cho một 4-5 tháng tốt ngay bây giờ và đột nhiên tôi bắt đầu nhận được lỗi 'FORBIDDEN' khi tôi cố gắng xem nội dung của thư mục thông qua trình duyệt web

Thư mục đang được tạo ra giống nhau và các bức ảnh vẫn còn tải lên mà không có một vấn đề, nhưng tôi không thể truy cập các bức ảnh

tôi đã cố gắng viết lại kịch bản và sử dụng chmod để thay đổi các điều khoản nhưng tôi đang gặp không may mắn chút nào

Tất cả các thư mục cũ đã được tạo ra với : -w- rwx rx rx

và tôi không thể tạo lại hình này

Tôi đã thử thêm một dòng chmod vào kịch bản của tôi:

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

nhưng tôi không thể tái tạo các điều khoản tương tự, tôi đang cố gắng để hiểu được cách làm việc chmod, nhưng tôi không thể tìm ra cách để có được chức năng rất cơ bản này hoạt động bình thường trở lại

+2

chấp nhận một số câu trả lời nếu bạn muốn mọi người giúp bạn – Galen

+0

Loại mã này khiến tôi khó chịu, bạn có đang lọc/lọc '$ thư mục' không? Nếu không, đó sẽ là dự đoán đầu tiên của tôi về lý do tại sao nó dừng lại, một sự bẻ khóa an ninh tiềm ẩn. –

+0

đây không phải là toàn bộ tập lệnh tôi có bộ lọc trên thư mục $ – Thomas

Trả lời

9

Hãy thử tìm một tệp HTAccess, nơi tùy chọn "Tùy chọn-Indexes" sẽ được đề cập, vì điều này chủ yếu được sử dụng để không hiển thị nội dung của một thư mục trong trình duyệt web . Các tập tin cần phải được tìm kiếm trong các cách sau đây: -

  • Trong thư mục "root_folder/sales/inventory/$folder/", trong đó "$folder" là như đã đề cập trong mã của bạn.
  • Nếu không tìm thấy, hãy thử trong thư mục "root_folder/sales/inventory /".
  • Nếu không tìm thấy, hãy thử trong thư mục "root_folder/sales /".
  • Nếu không tìm thấy, hãy thử trong thư mục "root_folder /".

Khi bạn nhận được mã của "Options -Indexes" được viết trong file .htaccess, bạn có thể xóa/nhận xét rằng dòng mã từ đó, hoặc bạn cũng có thể viết một tập tin .htaccess trong thư mục được yêu cầu của bạn về "$folder ", trong đó mã sẽ là" Chỉ mục tùy chọn ".

Cũng trong trang PHP, logic phải là như thế này: -

<?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); 
?> 

này sẽ giúp bạn khi bạn sẽ được bỏ liên kết/xóa các tập tin được tải lên từ thư mục "$ folder".

Hy vọng điều đó sẽ hữu ích.

+0

cảm ơn vì sự giúp đỡ, điều này giúp nhưng tôi vẫn gặp sự cố với quyền thực sự phản ánh những gì tôi cắm vào tập lệnh, ví dụ: Ví dụ hoạt động tốt ngoại trừ khi tôi nhìn vào các điều khoản từ cây thư mục, thư mục $ tạo ra không phải là rwx rx rx như được mong đợi, nhưng thay vào đó xuất hiện dưới dạng rwx rx --- – Thomas

+0

trên suy nghĩ thứ hai tôi chỉ đọc lại những gì bạn nói và tôi đã phải bỏ lỡ chmod trên một phần tải lên tập tin ở phần cuối, tôi đã cố gắng thêm rằng vào kịch bản tải lên và nó hoạt động tốt. Tôi thực sự đánh giá cao sự giúp đỡ của tất cả mọi thứ dường như không hoạt động, bây giờ tôi không thể tìm ra lý do tại sao điều này đã phá vỡ ở nơi đầu tiên – Thomas

+0

@thomas - Đó là một phần phổ biến, mà tôi cũng đã làm điều này sai, khi bản thân tôi là một trong lành hơn. Vì vậy, không có gì phải lo lắng và vui lên! ** Best of Luck !!! ** –

2

Nếu bạn đang ở trong một môi trường được chia sẻ, bạn cũng có thể muốn chown sau khi tải lên, để an toàn. Đặc biệt nếu bạn đang chạy máy chủ web của bạn dưới một người dùng khác với máy chủ ảo của bạn có quyền truy cập (EG: "nobody" vs "mysite".) Điều này là phổ biến với các máy chủ cPanel, FWIW.

6

Nếu biến $ thư mục của bạn bao gồm một số thư mục con, thư mục mẹ của bạn có thể không bị mã hóa thành quyền phù hợp. Đây là vấn đề tôi đang gặp trên máy chủ OVH Gentoo được thuê.

Hãy tưởng tượng rằng $folder = '/store1/ally23/shelf42'; để cấu trúc thư mục cuối cùng của bạn là ../sales/inventory/store1/ally23/shelf42 và bạn muốn 0777 điều chỉnh. Bạn làm:

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

Chỉ có thư chính thức shelf42 được chmoded để 0777. Các thư mục trung gian được tạo với các quyền mặc định (trong trường hợp của tôi là 0744).

Không có tùy chọn đệ quy trong lệnh chmod của PHP, vì vậy bạn phải lặp lại các thư mục trung gian và chmod chúng riêng lẻ.

+0

Tôi đã thử 'mkdir ($ folderPath, 777)' và nó không hoạt động. Tôi nhận ra rằng đó là do [quyền không chính xác] (http://digitalfortress.tech/php/difference-file-mode-0777-vs-777/). Cũng giống như một lưu ý, 0 preceeding 777 là rất quan trọng. –