2012-10-01 44 views
5

Tôi cần một hàm, có nguồn gốc hoặc do người dùng tạo, kiểm tra xem chuỗi có phải là tên thư mục hợp lệ hay không. Tôi đã xem qua tài liệu PHP và tôi chỉ có thể tìm thấy hàm is_dir kiểm tra xem đó có phải là thư mục hiện có hay không và không phải là tên hợp lệ cho một thư mục.Kiểm tra chuỗi cho tên thư mục hợp lệ

+3

Xác định "tên thư mục hợp lệ" Mỗi hệ điều hành có các hạn chế riêng. Xác định những gì hợp pháp và không, và sau đó xác nhận đối với điều đó. –

+0

một thư mục không tồn tại sẽ là một thư mục không hợp lệ, phải không? –

+0

Bạn có thể tìm kiếm một thư mục 'chung' regex .. – Darkwater

Trả lời

7

Điều này sẽ phù hợp với bạn.

Xem regex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

này sẽ làm việc. Bạn có thể sửa đổi các đối số thứ hai và thứ ba theo nhu cầu của bạn.

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

Lưu ý rằng điều này sẽ tạo thư mục nếu tên thư mục hợp lệ. Tuy nhiên, theo quan điểm khiêm tốn của tôi (và không biết trường hợp sử dụng cụ thể của bạn), đây là cách ưu tiên trong hầu hết các ngôn ngữ để xử lý tính hợp lệ của tên thư mục kiểm tra. Chỉ cần thử tạo thư mục, và nếu nó không thành công, sau đó nói với họ rằng nó không thành công.

Lợi ích của việc này là nó giữ cho hệ thống tệp mã của bạn bất khả tri và đó là phương pháp ít bị lỗi nhất để xác thực và tạo thư mục, vì không có quy trình hoặc chuỗi nào khác có thể tạo thư mục giữa khi bạn xác thực thư mục và khi bạn tạo nó.

Hạn chế là phương pháp này giả định bạn muốn tạo thư mục ngay lập tức.

Tất nhiên, có nhiều lý do khiến mkdir() bị lỗi (ví dụ: không đủ quyền, lỗi phần cứng, tên thư mục không hợp lệ, v.v.), vì vậy bạn có thể hiển thị các thông báo lỗi khác nhau cho người dùng dựa trên lỗi. Thật không may, PHP không có xử lý ngoại lệ mạnh mẽ như một số ngôn ngữ khác, nhưng nếu bạn muốn đi xuống con đường này, bạn sẽ có thể sử dụng cách tiếp cận như trong answer để nhận các cảnh báo khác nhau mà mkdir() có thể tạo.

+0

Có lẽ bạn nên thử điều này: 'mkdir ('dirname/test /../ temp', 0700, true);' Nó có thể hữu ích để lọc tên '$ directory' cho những thứ nhất định như @GregoryBurns gợi ý trong câu trả lời của anh ấy ... – Wilt

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