2011-06-28 46 views
8

Tôi có một trang trong trang web của mình, hiển thị một số hình ảnh được tạo ra từ PHP của tôi. Khi tôi nhấp chuột phải vào một hình ảnh và nhấp vào Lưu hình ảnh Khi tôi nhận được như tên mặc định tên của tập tin php được sử dụng để tạo ra hình ảnh.Làm cách nào để đặt tên 'lưu hình ảnh làm' mặc định cho một hình ảnh được tạo bằng PHP?

Đây là ví dụ html cho hình ảnh:

<img src="picture_generator.php?image_id=5&extension=.png"> 

và tên tôi nhận được là: picture_generator.php.png

Có cách nào để đặt tên này cho một người một mặc định ?

Cảm ơn trước

Trả lời

4

Bạn có thể thử đặt tên tệp bằng cách sử dụng tiêu đề HTTP nhưng không phải tất cả trình duyệt đều tôn trọng điều đó.

Bí quyết đơn giản nhất là để mở rộng URL để phần cuối cùng chứa tên tập tin mong muốn:

<img src="picture_generator.php/desiredfilename.jpg?image_id=5&extension=.png&name=desiredfilename.jpg"> 

Note Tôi cũng đã thêm tên tập tin ở phần cuối của chuỗi truy vấn (các name không thực sự quan trọng) vì một số trình duyệt sử dụng phần đó.

Tùy thuộc vào cấu hình máy chủ của bạn, thao tác này sẽ ngay lập tức hoạt động mà không có bất kỳ cấu hình đặc biệt nào (không có mod_rewrite hoặc bất kỳ thứ gì tương tự). Bạn có thể kiểm tra xem nó có hoạt động trên máy chủ của bạn không bằng cách đơn giản thêm "/foo" vào bất kỳ URL PHP nào trên trang web của bạn. Nếu bạn thấy đầu ra của PHP, tất cả đều tốt. Nếu bạn thấy lỗi 404 thì cấu hình máy chủ của bạn không thể xử lý các URL đó.

+0

Không, rất tiếc, tôi đã nhận được trang lỗi 404. – novellino

+0

Oups xin lỗi lỗi của tôi. Nó hoạt động tốt cho tất cả các trình duyệt. Cảm ơn rất nhiều!! – novellino

+0

Hãy nhớ rằng giải pháp này có thể bị ngắt khi bạn di chuyển mã của mình sang một máy chủ khác vì nó phụ thuộc vào cách máy chủ Web và trình thông dịch PHP đang làm việc cùng nhau. FYI, trong tập lệnh PHP của bạn, bạn có thể tìm thấy hậu tố đó trong biến '$ _SERVER [" PATH_INFO "]' [[docs] (http://php.net/manual/en/reserved.variables.server.php)] –

1

Trong tệp picture_generator.php bạn cần thêm tiêu đề có tên. như

header("Content-Disposition: attachment; filename=\"myfile.png\""); 
+1

Bạn có chắc chắn nó phải là "tệp đính kèm" không? Điều đó sẽ không khiến trình duyệt cố tải xuống tệp thay vì hiển thị tệp đó không? – Crashspeeder

+0

xin lỗi, đang sao chép từ ứng dụng tải xuống của tôi .. Tôi muốn xóa nó. không, tải trọng lực lượng tải xuống, nhưng nếu không, nó sẽ hoạt động (một khi đã bị xóa) – BugFinder

+0

Cảm ơn rất nhiều. Nó hoạt động như thế! – novellino

9

Bạn có thể cung cấp cho nó trong tiêu đề Content-Disposition HTTP:

header('Content-Type: image/png'); 
header('Content-Disposition: inline; filename="' . $filename . '"'); 

Tuy nhiên, một số trình duyệt (cụ thể là Internet Explorer) có nhiều khả năng để bỏ qua tiêu đề này. Giải pháp chống đạn nhiều nhất là để giả mạo URL và làm cho trình duyệt tin rằng trình duyệt tải xuống tệp tĩnh như /images/5/foo.png trong khi đường dẫn thực tế đằng sau hậu trường là /picture_generator.php?image_id=5&extension=.png. Điều này có thể được thực hiện bởi một số mô-đun máy chủ web như của Apache mod_rewrite.

+0

Cảm ơn bạn đã phát lại. Tôi đã thử điều này nhưng không hoạt động. Thay vào đó, tệp đính kèm trên nội tuyến phù hợp hơn. – novellino

+0

Tính năng này rất hữu ích cho trình duyệt của Android. Tôi gặp sự cố khi lưu hình ảnh với phần mở rộng .php. Điều này cố định nó. – MrZander

+0

Đó là công việc hoàn hảo nhờ –

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