2012-07-13 43 views
7

Tôi đang cố gắng sử dụng chức năng PHP unlink() để xóa tài liệu cụ thể trong thư mục. Thư mục cụ thể đó đã được gán cho toàn quyền cho người dùng IIS.Cách sử dụng chức năng Unlink()

Code:

$Path = './doc/stuffs/sample.docx'; 
if (unlink($Path)) {  
    echo "success"; 
} else { 
    echo "fail";  
} 

Nó giữ lại thất bại. Sample.docx không nằm trên đường dẫn cụ thể đó. Vui lòng tư vấn.

+0

Bạn đã kiểm tra nếu bạn có quyền xóa các tập tin? Addiotinally, cố gắng sử dụng một đường dẫn tuyệt đối, như thế này: '$ Path = '/ doc/stuffs/sample.docx'' –

+0

có. Tôi có thể tải xuống tệp cụ thể đó để đường dẫn của tôi sẽ hoạt động. – JLearner

+0

Nếu bạn chắc chắn các điều khoản là chính xác, tôi đoán con đường là sai, như Marcio gợi ý. Bạn đã thử kiểm tra nó với 'file_exists()' chưa? – SilverSnake

Trả lời

9

tôi tìm thấy thông tin này in the comments of the function unlink()

Dưới hệ thống Windows và Apache, từ chối quyền truy cập vào tập tin là một lỗi thông thường bỏ liên kết tập tin. Để xóa tệp, bạn phải thay đổi chủ sở hữu của tệp. Một ví dụ:

chown($tempDirectory . '/' . $fileName, 666); //Insert an Invalid UserId to set to Nobody Owern; 666 is my standard for "Nobody" 
unlink($tempDirectory . '/' . $fileName); 

Vì vậy, thử một cái gì đó như thế này:

$path = './doc/stuffs/sample.docx'; 

chown($path, 666); 

if (unlink($path)) { 
    echo 'success'; 
} else { 
    echo 'fail'; 
} 

EDIT 1

Cố gắng sử dụng này trong đường dẫn:

$path = '.' 
     . DIRECTORY_SEPARATOR . 'doc' 
     . DIRECTORY_SEPARATOR . 'stuffs' 
     . DIRECTORY_SEPARATOR . 'sample.docx'; 
+0

nó không hoạt động. nó rơi vào tuyên bố khác mà không thành công: ( – JLearner

+0

@JLearner, Cố gắng thực hiện chỉnh sửa mới mà tôi đã thực hiện –

+0

Tôi đã làm một số sai sót bất cẩn trên đường dẫn tệp của mình bằng cách đặt 1 '.' lees =. = – JLearner

6

Hãy thử điều này:

$Path = './doc/stuffs/sample.docx'; 
if (file_exists($Path)){ 
    if (unlink($Path)) { 
     echo "success"; 
    } else { 
     echo "fail";  
    } 
} else { 
    echo "file does not exist"; 
} 

Nếu bạn nhận được tập tin không tồn tại, bạn có đi sai đường. Nếu không, nó có thể là một vấn đề quyền.

+0

Xin chào travis.Đó cho tôi tập tin không tồn tại nhưng đường dẫn cũng được sử dụng để tải xuống tài liệu và nó hoạt động .... – JLearner

+0

./ có nghĩa là đường dẫn là tương đối Có phải tập lệnh này chạy từ cùng một thư mục tập lệnh để tải xuống tệp được chạy từ? – Travis

+0

Bạn đã đề cập đường dẫn được mua từ một trang khác có dấu ./ ở phía trước nó. Bạn có thể cung cấp thêm mã hoặc tham chiếu chiều sâu đến nơi đường dẫn tệp đến từ đâu? – Travis

0

Bạn cần đường dẫn tệp đầy đủ đến tệp quan tâm. Ví dụ: C: \ doc \ stuff \ sample.docx. Hãy thử sử dụng __DIR__ hoặc __FILE__ để lấy vị trí tệp tương đối của bạn để bạn có thể điều hướng đến tệp quan tâm.

+0

Tôi không thể làm điều đó vì đường dẫn cụ thể đó đã phân tích cú pháp từ một trang web khác có './' ở phía trước. – JLearner

+0

Bạn đang cố xóa một tệp trên hệ thống tệp của một trang web khác? –

+0

Nó nằm trong cùng một máy chủ web của tôi – JLearner

2

này nên w ork một khi bạn đang thực hiện với các vấn đề cho phép. Cũng cố gắng

ini_set('display_errors', 'On'); 

Điều đó sẽ cho bạn biết whats sai

+0

. đường dẫn hoặc thư mục .. nhưng nó tồn tại .. – JLearner

+1

thử hủy liên kết ($ _ SERVER ['DOCUMENT_ROOT']. "/ doc/stuffs/sample.docx"); – leet

0
define("BASE_URL", DIRECTORY_SEPARATOR . "book" . DIRECTORY_SEPARATOR); 
define("ROOT_PATH", $_SERVER['DOCUMENT_ROOT'] . BASE_URL); 

$path = "doc/stuffs/sample.docx"; 

if (unlink(ROOT_PATH . $Path)) { 
    echo "success"; 
} else { 
    echo "fail";  
} 

// http://localhost/book/doc/stuffs/sample.docx 
// C:/xampp/htdocs\book\doc/stuffs/sample.docx 
Các vấn đề liên quan