2010-12-30 41 views
5

Trong data2 thư mục, tôi có những tập tin này:Tại sao hàm PHP glob() trả về các tệp không khớp với ký tự đại diện?

alt text

Với đoạn mã sau (chạy trên Mac), tôi muốn chỉ nhận được các tập tin kết thúc bằng .xls:

$file_names = glob('data2/*.xls'); 
foreach ($file_names as $file_name) { 
    echo $file_name . '<br/>'; 
} 

tôi hy vọng rằng mã này sẽ trả về một tệp 27template.xls, tuy nhiên, nó cũng trả về các tệp có TEMP trong chúng và thêm một số .xls cho chúng:

alt text

Added: cũng nếu tôi thay đổi smaller.xls để smaller.xlsx sau đó nó không thấy nó như mong đợi, nhưng nếu tôi thay đổi nó để smaller.NNN nó tìm thấy smaller.NNN.xls.

Tôi làm cách nào để sử dụng glob() để chỉ nhận các tệp .xls?

+4

Cái gì? –

+2

Không thể sao chép trên Mac OS X 10.6.5 với PHP 5.3.0. Chỉ trả lại '27template.xls' như tôi mong đợi. – BoltClock

+4

Bạn có chắc chắn các tệp không có tiện ích mở rộng này, bị ẩn trong giao diện người dùng của mình không? – regilero

Trả lời

0

Tên tệp như data2/smaller.xlsTEMP.xls khớp với biểu thức glob của dữ liệu2/*. Xls, vì vậy nó sẽ được trả về bởi glob ... bạn có chắc chắn rằng nó không tồn tại? (Có lẽ tương đương với Mac của Windows ẩn)

Hãy thử kết hợp hai biểu thức glob với array_diff()

$file_names = array_diff(glob('data2/*.xls'),glob('data2/*.*.xls')); 

Các glob thứ hai trả về những mục mà bạn không muốn, thì array_diff() bộ lọc chính xác đến ra khỏi kết quả từ glob đầu tiên

EDIT

hoặc thử gọi clearstatcache() ngay trước khi glob của bạn, trong trường hợp PHP đã cache mục thư mục từ một truy vấn trước đó

2

Tôi nghĩ đó là vì tiện ích bạn đang xem có thể không phải là tiện ích mở rộng thực (được ẩn theo mặc định trên Trình tìm kiếm). Bạn có thể kiểm tra phần mở rộng thực bằng cách nhấp vào tập tin và nhấp vào "Nhận thông tin". Nếu bạn muốn hiển thị các phần mở rộng của tất cả các tập tin bạn phải làm theo các bước theo tài liệu của Apple:

Để hiển thị tiện ích mở rộng cho tất cả các tệp, hãy chọn "Hiển thị tất cả tiện ích mở rộng tệp" . "

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