Hàm fputcsv[] trong PHP là một hàm sẵn có được sử dụng để định dạng một dòng dưới dạng tệp CSV [các giá trị được phân tách bằng dấu phẩy] và ghi nó vào một tệp đang mở. Tệp phải được đọc và các trường được gửi dưới dạng tham số cho hàm fputcsv[] và nó trả về độ dài của chuỗi đã viết nếu thành công hoặc FALSE nếu thất bại
cú pháp
int fputcsv [ $file, $fields, $separator, $enclosure ]
Thông số. Hàm fputcsv[] trong PHP chấp nhận bốn tham số như được giải thích bên dưới
- tập tin $. Đây là một tham số bắt buộc chỉ định tệp
- trường $. Nó là một tham số bắt buộc chỉ định mảng nào sẽ lấy dữ liệu từ
- dấu phân cách $. Nó là một tham số tùy chọn chỉ định dấu tách trường. Theo mặc định, hàm fputcsv[] sử dụng dấu phẩy
- bao vây $. Đây là một tham số tùy chọn chỉ định ký tự bao vây trường. Theo mặc định, hàm fputcsv[] sử dụng
Giá trị trả về. Hàm này trả về độ dài của chuỗi đã viết nếu thành công hoặc FALSE nếu thất bại
ngoại lệ
- Nếu một ký tự bao vây được chứa trong một trường, nó sẽ được thoát ra bằng cách nhân đôi nó, trừ khi nó được đặt ngay trước một escape_char
- Kích hoạt tùy chọn cấu hình thời gian chạy auto_detect_line_endings có thể giúp giải quyết vấn đề PHP nhận dạng đúng các kết thúc dòng khi đọc tệp trên hoặc được tạo bởi máy tính Macintosh
Dưới đây là các chương trình minh họa hàm fputcsv[].
Chương trình 1.
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi2
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi3
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi4
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi5
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi6
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi8
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi1
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi2
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi1____15
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi6
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi8
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi9
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi5
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi11
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi13
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi15
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi6
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi18
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi19
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi20
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7____24
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi23
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi24
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi25
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi26
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi27
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi28
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi9
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi32
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi34
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi24
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi37
Bài viết sau đây trình bày một phương pháp đơn giản để xuất bất kỳ dữ liệu nào từ PHP vào một bảng tính Excel
1. Chuẩn bị dữ liệu
Ví dụ sau đây sẽ tạo dữ liệu sử dụng cho công việc Sắp xếp Mảng của Mảng , được trình bày như sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi6
Ghi chú. Tiếp tục xuống trang này, bạn có thể tìm thấy ví dụ về cách tạo bản xuất từ truy vấn SQL
Bước đầu tiên là xuất dữ liệu ở định dạng được phân định bằng tab [cũng có thể sử dụng CSV nhưng phức tạp hơn một chút]. Để đạt được điều này, chúng tôi sử dụng đoạn mã sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi7
Chúng tôi đặt loại nội dung thành văn bản/đơn giản để có thể dễ dàng xem kết quả đầu ra trong trình duyệt. Mặt khác, vì không có định dạng HTML, đầu ra sẽ xuất hiện dưới dạng một dòng văn bản
Dòng đầu tiên của đầu ra sẽ là tiêu đề cột [trong trường hợp này, tên trường được sử dụng]. Các giá trị được phân tách bằng tab \t và các hàng có dấu ngắt dòng \n. Đầu ra sẽ trông giống như sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi8
Đã có một điểm yếu trong mã này có thể không rõ ràng ngay lập tức. Điều gì sẽ xảy ra nếu một trong các trường được xuất ra đã chứa một hoặc nhiều ký tự tab hoặc tệ hơn là một dòng mới?
Giải pháp là 'thoát' các ký tự tab. Trong trường hợp này, chúng tôi sẽ thay thế các tab bằng chữ \tắt dòng bằng chữ \n để chúng không ảnh hưởng đến định dạng
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi9
Bây giờ, trước khi mỗi hàng được lặp lại, bất kỳ ký tự tab nào cũng được thay thế “\t” để các cột của chúng ta không bị chia nhỏ. Ngoài ra, mọi ngắt dòng trong dữ liệu đều được thay thế bằng “\n”. Bây giờ, làm thế nào để thiết lập cái này dưới dạng bản tải xuống…
2. Kích hoạt tải xuống
Điều mà nhiều lập trình viên không nhận ra là bạn không cần phải tạo một tệp, thậm chí là tệp tạm thời, để một tệp được tải xuống. Nó đủ để 'bắt chước' tải xuống bằng cách chuyển các tiêu đề HTTP tương đương theo sau là dữ liệu
Nếu chúng ta tạo một tệp PHP với đoạn mã sau thì khi nó được gọi, một tệp sẽ được tải xuống và có thể mở trực tiếp bằng Excel
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi0
Xin lưu ý rằng chúng tôi đã thêm một dòng bổ sung vào hàm cleanData để phát hiện dấu ngoặc kép và thoát khỏi bất kỳ giá trị nào chứa dấu ngoặc kép. Nếu không có điều này, số lượng trích dẫn không đồng đều trong một chuỗi có thể gây nhầm lẫn cho Excel
» nhấp vào đây để kích hoạt tải xuống «
Điều này sẽ dẫn đến một tệp được tải xuống và lưu vào máy tính của bạn. Nếu mọi việc suôn sẻ thì tên tệp sẽ được đặt tên là “website_data_20131002. xls” và sẽ mở trong Excel trông giống như thế này
Làm thế nào nó hoạt động? . Dữ liệu sau đó được lặp lại, nhưng thay vì xuất hiện trên trang, nó sẽ trở thành tệp được tải xuống
vì. xls và loại tệp ms-excel, hầu hết các máy tính sẽ liên kết nó với Excel và việc nhấp đúp sẽ mở chương trình đó. Bạn cũng có thể sửa đổi tên tệp và loại mime để chỉ ra gói bảng tính hoặc ứng dụng cơ sở dữ liệu khác
Không có cách nào để chỉ định dữ liệu hoặc định dạng ô, độ rộng cột, v.v. khi sử dụng phương pháp này. Chúng tôi chỉ chuyển một tệp văn bản được phân định bằng tab. Để bao gồm định dạng, hãy thử tạo mã HTML hoặc tập lệnh thực sự tạo tệp Excel. Hoặc tạo macro của riêng bạn trong Excel áp dụng định dạng sau khi nhập
Một kỹ thuật tương tự có thể được sử dụng để cho phép người dùng tải xuống các tệp đã được tải lên trước đó bằng PHP và được lưu trữ với các tên khác nhau. Thông tin thêm về điều đó sau…
3. Xuất từ cơ sở dữ liệu SQL
Nếu mục tiêu của bạn là cho phép xuất dữ liệu từ kết quả truy vấn thì các thay đổi tương đối đơn giản
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi1
Đây sẽ là toàn bộ tệp cần thiết để truy vấn cơ sở dữ liệu và kích hoạt tải xuống tệp. Các hàm cơ sở dữ liệu cần khớp với cơ sở dữ liệu bạn đang sử dụng. Ví dụ: người dùng MySQL sẽ cần sử dụng mysql_query và mysql_fetch_assoc hoặc mysqli_fetch_assoc thay cho các hàm PostgreSQL
Đối với các cơ sở dữ liệu khác, hãy xem phần Nhận xét của người dùng bên dưới hoặc xem tài liệu PHP. Nếu bạn thấy các cột trùng lặp [được đánh số cũng như được gắn nhãn], bạn cần thay đổi lệnh gọi tìm nạp để chỉ trả về mảng kết hợp [ASSOC]
Nếu bạn gặp sự cố ở giai đoạn này, hãy xóa tiêu đề Bố trí nội dung và thay đổi Loại nội dung trở lại văn bản/thuần túy. Điều này làm cho việc gỡ lỗi dễ dàng hơn rất nhiều vì bạn có thể thấy đầu ra trong trình duyệt của mình thay vì phải tải xuống và mở tệp được tạo mỗi khi bạn chỉnh sửa tập lệnh
4. Ngăn chặn định dạng tự động lố bịch của Excel
Khi nhập từ tệp văn bản như chúng ta đang thực hiện ở đây, Excel có thói quen khó chịu là xáo trộn ngày, dấu thời gian, số điện thoại và các giá trị đầu vào tương tự
Đối với mục đích của chúng tôi, một số bổ sung đơn giản cho hàm cleanData sẽ giải quyết hầu hết các sự cố
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi2
Phần ngăn các giá trị bị xáo trộn thực hiện bằng cách chèn dấu nháy đơn ở đầu ô. Khi mở tệp kết quả trong Excel, bạn có thể thấy dấu nháy đơn, nhưng việc chỉnh sửa trường sẽ làm cho dấu nháy đơn biến mất trong khi vẫn giữ nguyên định dạng chuỗi. Excel là lạ theo cách đó
Các loại giá trị được thoát theo cách này là. các giá trị bắt đầu bằng số không; . Các biểu thức chính quy có liên quan đã được đánh dấu trong đoạn mã trên
5. Định dạng – màu sắc, số, ngày tháng
Tập lệnh này tạo và kích hoạt tải xuống tệp văn bản bằng Loại Mime Excel. Chúng tôi không xây dựng tệp bảng tính Excel thực tế
Không thể xác định kiểu dáng, màu sắc, độ rộng cột, v.v. bằng kỹ thuật này. Bạn có thể tạo một bảng HTML với một số dữ liệu được định dạng mà Excel sẽ nhận ra, nếu không, bạn cần một tập lệnh phức tạp hơn nhiều
6. Xuất sang định dạng CSV
Các phiên bản Excel mới hơn đang trở nên cầu kỳ trong việc mở tệp bằng. xls không phải là tệp nhị phân Excel, tạo định dạng CSV bằng. tiện ích mở rộng csv một tùy chọn tốt hơn
Các tùy chọn văn bản được phân định bằng tab mô tả ở trên có thể hơi hạn chế nếu dữ liệu của bạn chứa các dòng mới hoặc dấu ngắt tab mà bạn muốn giữ nguyên khi mở trong Excel hoặc ứng dụng bảng tính khác
Sau đó, một định dạng tốt hơn là các biến được phân tách bằng dấu phẩy [CSV] có thể được tạo như sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi3
Thông thường, lệnh fputcsv được dùng để ghi dữ liệu ở định dạng CSV vào một tệp riêng. Trong tập lệnh này, chúng tôi đang lừa nó ghi trực tiếp vào trang bằng cách yêu cầu nó ghi vào php. // đầu ra thay vì tệp thông thường. Một mẹo hay
Bên cạnh đó, để xuất trực tiếp sang định dạng CSV từ giao diện dòng lệnh trong PostgreSQL, bạn có thể sử dụng một cách đơn giản
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi4
và đối với MySQL, đại loại như sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi5
7. Xuất sang CSV với Unicode nguyên vẹn
Nếu giống như chúng tôi, dữ liệu của bạn chứa các ký tự UTF-8, bạn sẽ nhận thấy rằng Excel không xử lý chúng tốt lắm. Các ứng dụng khác có thể mở nội dung UTF-8 mà không gặp sự cố, nhưng vì lý do nào đó, Microsoft muốn giữ bạn trong thời kỳ đen tối
May mắn thay, có một mẹo bạn có thể sử dụng. Dưới đây, bạn có thể thấy cách chúng tôi sửa đổi tập lệnh để chuyển đổi mọi thứ từ định dạng UTF-8 sang UTF-16 Lower Endian [UTF-16LE] mà Excel, ít nhất là trên Windows, sẽ nhận ra
Khi mở tệp này trong Excel, bạn có thể thấy tất cả dữ liệu được nhóm vào cột đầu tiên. Điều này có thể sửa được bằng cách sử dụng lệnh “Chuyển văn bản thành cột…” trong menu Dữ liệu
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi70
Tập lệnh này có thể không hoạt động đối với tất cả các phiên bản Excel. Vui lòng cho chúng tôi biết bằng cách sử dụng biểu mẫu Phản hồi bên dưới nếu bạn gặp sự cố hoặc đưa ra giải pháp tốt hơn
8. Chỉ định tiêu đề cột
Tất cả các ví dụ tải xuống cơ sở dữ liệu ở trên đều sử dụng tên trường cơ sở dữ liệu cho hàng đầu tiên của tệp đã xuất, đây có thể không phải là thứ bạn muốn. Nếu bạn muốn chỉ định các tiêu đề thân thiện với người dùng hơn của riêng mình, bạn có thể sửa đổi mã như sau
Raj, Singh, Developer, Mumbai Sameer, Pandey, Tester, Bangalore Raghav, Chauhan, Manager, Delhi71
Các giá trị trong hàng đầu tiên sẽ được ánh xạ theo mảng liên kết $colnames. Nếu không có ánh xạ nào được cung cấp cho một tên trường, nó sẽ không thay đổi. Tất nhiên bạn sẽ muốn cung cấp danh sách các tiêu đề phù hợp của riêng mình. Họ không cần phải theo thứ tự