2012-11-27 34 views
19

Tôi có hai tập tin: b.php và test.txtcho phép từ chối - php Unlink

<?php 
$b = "test.txt"; 
unlink($b); 
?> 

và lỗi này là: Cảnh báo: unlink (test.txt) [function.unlink]: Permission denied

lý do tại sao? b.php và test.txt là 777 và cùng một nhóm/đăng nhập

nếu tôi đặt 777 trên thư mục mẹ Tôi có thể thực hiện hủy liên kết nhưng tôi phải đặt 777 và quay lại 755?

+1

Chúng có trong t anh ta cùng một thư mục? –

+1

có thể là bạn cần có quyền ghi vào thư mục mà họ cư trú trong quá trình chạy mã php. –

+0

có, cùng một thư mục – eugui

Trả lời

19

Bạn (như trong quá trình chạy b.php, hoặc là bạn thông qua CLI hoặc máy chủ web) cần phải ghi quyền truy cập vào thư mục chứa tệp. Bạn đang cập nhật nội dung thư mục, vì vậy quyền truy cập vào tệp không đủ.

Lưu ý rằng nếu bạn sử dụng chức năng PHP chmod() để đặt chế độ tệp hoặc thư mục thành 777, bạn nên sử dụng 0777 để đảm bảo số được hiểu chính xác dưới dạng số bát phân.

3
// Path relative to where the php file is or absolute server path 
chdir($FilePath); // Comment this out if you are on the same folder 
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465 
$do = unlink($FileName); 

if($do=="1"){ 
    echo "The file was deleted successfully."; 
} else { echo "There was an error trying to delete the file."; } 

Hãy thử điều này. Hy vọng nó giúp.

+1

chown() [function.chown]: Hoạt động không được phép – eugui

+0

Điều này có thể do bạn không có quyền thay đổi quyền sở hữu tệp. Bạn có thể thử thay đổi quyền truy cập vào tệp để xem liệu nó có thay đổi không? (ví dụ: chmod ("test.txt", 0666). bạn có thể thử và hủy liên kết nó trên 666 để xem điều gì xảy ra. Có cách nào người dùng sở hữu tệp không? – Ardi

17

Trước tiên, bạn cần phải đóng tệp bằng cách sử dụng fclose($handle); nó sẽ không xóa vì tệp đang được sử dụng. Vì vậy, trước tiên đóng tập tin và sau đó thử.

+0

Điều này đã giải quyết được vấn đề của tôi, cảm ơn o / – heavyrick

0

Quyền của tệp là không sao (0777) nhưng tôi nghĩ rằng bạn trên máy chủ dùng chung, do đó, để xóa tệp của bạn một cách chính xác; 1. tạo ra một đường dẫn chính xác đến file của bạn

// delete from folder 
$filename = 'test.txt'; 
$ifile = '/newy/made/link/uploads/'. $filename; // this is the actual path to the file you want to delete. 
unlink($_SERVER['DOCUMENT_ROOT'] .$ifile); // use server document root 
// your file will be removed from the folder 

Đó mã nhỏ sẽ làm điều kỳ diệu và loại bỏ bất kỳ tập tin được lựa chọn bạn muốn từ bất kỳ thư mục cung cấp các đường dẫn tập tin thực tế là thu thập.

0

ngoài tất cả các câu trả lời mà bạn bè khác có, nếu ai đó đang tìm kiếm bài đăng này đang tìm cách xóa "Thư mục" không phải là "tệp", nên lưu ý rằng Thư mục phải xóa theo php rmdir() function và nếu u muốn xóa một "folder" bởi unlink(), u sẽ gặp phải với một thông điệp cảnh báo sai nói rằng "cho phép từ chối"

tuy nhiên u có thể làm cho các thư mục & file theo mkdir() nhưng cách u xóa thư mục (rmdir()) là khác với cách bạn xóa các tệp (unlink())

Các vấn đề liên quan