Giống như bạn nói, nếu được sử dụng trên một tập tin không tồn tại, getimagesize tạo ra một cảnh báo:
mã này:
if ($data = getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
sẽ giúp bạn có một
Warning: getimagesize(not-existing.png) [function.getimagesize]:
failed to open stream: No such file or directory
Một giải pháp sẽ được sử dụng @ operator, để che dấu rằng lỗi:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
Như các tập tin không tồn tại, $ dữ liệu sẽ vẫn là sai lầm; nhưng không có cảnh báo nào được hiển thị.
Một giải pháp khác sẽ là check if the file exists, trước khi sử dụng getimagesize; một cái gì đó như thế này sẽ làm:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
Nếu tập tin không tồn tại, getimagesize không được gọi - có nghĩa là không cảnh báo
Tuy nhiên, giải pháp này không phải là người bạn nên sử dụng cho hình ảnh mà trên một máy chủ khác, và truy cập qua HTTP (nếu bạn đang ở trong trường hợp này), vì nó sẽ có nghĩa là hai yêu cầu đến máy chủ từ xa.
Đối với hình ảnh địa phương, điều đó sẽ khá OK, tôi cho là; chỉ có vấn đề tôi thấy là thông báo được tạo ra khi có lỗi đọc không bị che khuất.
Cuối cùng:
- tôi sẽ cho phép các lỗi sẽ được hiển thị trên máy chủ developpement của bạn,
- Và sẽ không hiển thị những trên máy chủ sản xuất của bạn - xem
display_errors
, về điều đó ;-)
Nguồn
2009-09-01 18:41:25
Lưu ý rằng, tập tin getimagesize() có thể vẫn không thành công, vì tập tin có thể bị xóa ngay giữa các cuộc gọi phương thức. Veeery không, nhưng sẽ xảy ra trong những khoảnh khắc tồi tệ nhất ... – ya23
@ ya23: true; nhưng bạn sẽ rất không may mắn ^^ Và tôi không thích các lỗi mặt nạ với @: nếu bạn đang sử dụng nó, và có một vấn đề, nó thường nhanh chóng là một nỗi đau để gỡ lỗi :-( –
Vâng tôi nghĩ rằng @ là khá bẩn :) – Gigala