در دنیای امروزی که بر پایه دادهها است، مدیریت و به اشتراک گذاری اطلاعات به کارآمدی برای کسب و کارها و توسعهدهندگان تبدیل شده است. یک راه حل چند منظوره، استفاده از فایلهای CSV است که به عنوان یک فرمت ساده و سازگار با پلتفرمهای مختلف شناخته میشوند.
از خروجی گرفتن اطلاعات به فرمت CSV استفاده های از قبیل : بکاپ محصولات فروشگاه ،کاربران ،مقالات و ... برای ذخیره سازی و انتقال به سایت دیگر میتوان بهره برد.
در این راهنما، شما را از آغاز تا انتها روند پیادهسازی ویژگی ضروری خروجی گرفتن از داده به فرمت CSV با استفاده از PHP را آموزش میدهیم.
چگونه دادهها را به فرمت CSV صدور کنیم؟ — مرحله به مرحله یک راهنمای 10 مرحلهای را به شکل ساده و مفهوم برای شما تنظیم کردهام تا در هر مرحله به درستی بتوانید ویژگی صدور CSV را در PHP پیادهسازی کنید و با مشکل مواجه نشوید.
یک راهنمای 10 مرحلهای را به شکل ساده و مفهوم برای شما تنظیم کردهام تا در هر مرحله به درستی بتوانید ویژگی صدور CSV را در PHP پیادهسازی کنید و با مشکل مواجه نشوید.
در زبان PHP برای شروع بافر خروجی (Output Buffering) استفاده میشود. Output buffering به توسعهدهندگان اجازه میدهد تا خروجی پیاچپی را به یک بافر ذخیره کنند به جای اینکه آن را به صورت مستقیم به مرورگر ارسال کنند. این کار امکان کنترل بیشتری را بر روی خروجی PHP ایجاد میکند.
زمانی که ()ob_start فراخوانی میشود، PHP شروع به بافرینگ (Buffering) خروجی میکند. این به معنی آن است که هر خروجی تولید شده توسط کد PHP به جای ارسال به مرورگر به بافر ارسال میشود. این بافر در حافظه نگهداری میشود تا زمانی که تصمیم گرفته شود، به مرورگر ارسال شود.
این ویژگی به توسعهدهندگان این امکان را میدهد که قبل از ارسال خروجی به مرورگر، محتوا را تغییر دهند یا تبدیلات انجام دهند. برای مواردی مانند افزودن هدرها (headers) به خروجی، تغییر محتوای خروجی، یا ذخیره کردن خروجی در فایل به جای نمایش آن در مرورگر کاربرد دارد.
// Start the output buffer
ob_start();
قطعه کد زیر به منظور تنظیم هدرهای HTTP در PHP برای صدور دادهها به فرمت CSV استفاده میشود. این هدرها به مرورگر اطلاعاتی در مورد نوع و نحوه نمایش دادهها ارسال میکنند. در اینجا هدرهایی تنظیم میشوند که به مرورگر اطلاعات زیر را ارائه میدهند:
// Set PHP headers for CSV output.
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=csv_export.csv');
Content-Type: text/csv; charset=utf-8 :
این هدر نوع محتوای ارسالی را به مرورگر اعلام میکند. در اینجا، نوع محتوا به "text/csv" تنظیم شده است که به مرورگر نشان میدهد که دادهها به عنوان یک فایل CSV دریافت خواهند شد. همچنین، "charset=utf-8" نیز تعیین شده است تا کاراکترهای متنی با استفاده از کدگذاری UTF-8 باشند.
Content-Disposition: attachment; filename=csv_export.csv :
این هدر به مرورگر اطلاع میدهد که باید دادهها به عنوان یک پیوست دانلودی (attachment) نمایش داده شوند و نام فایلی که باید دانلود شود "csv_export.csv" است. این باعث میشود که مرورگر پیشنهاد دانلود فایل به کاربر دهد و نام فایل تعیین شده باشد.
توجه: اگر شما هدرهای PHP مورد نظر که قبلاً اشاره شد را اضافه نکنید، فایل CSV تولید شده به صورت خودکار دانلود نخواهد شد. به جای آن، تنها محتوا نمایش داده خواهد شد.
ابتدا با ایجاد یک آرایه از هدرها برای فایل CSV شروع کنید تا محتوا به شکل جدولی شناخته شود.
// Create the headers
$header_args = array('عنوان محصول', 'قیمت اولیه', 'موجودی', 'تخفیف', 'فروشنده', 'تاریخ ثبت');
این کد یک آرایه به نام `header_args` ایجاد میکند که شامل چند آیتم(رشتهها) است. این رشتهها به عنوان هدرهای فایل CSV عمل میکنند و مشخص میکنند که هر ستون در فایل CSV چه نوع اطلاعات را نمایش میدهد. در این مثال، هدرهای موجود در فایل CSV شامل "عنوان محصول"، "قیمت اولیه"، "موجودی"، "تخفیف"، "فروشنده" و "تاریخ ثبت" هستند. این هدرها به معنای ستونهایی هستند که در فایل CSV نمایش داده میشوند و توصیف میکنند که هر ستون چه نوع اطلاعاتی را نمایش میدهد.
آمادهسازی محتوای درست برای خروجی گرفتن یک مرحله مهم در هنگام صدور داده به یک فایل CSV با استفاده از PHP است. این فرآیند شامل جمعآوری و سازماندهی دادههایی است که قرار است صادر شوند.
در زیر چند نکته برای در نظر گرفتن در هنگام آمادهسازی محتوای درست برای صدور آمده است:
منبع داده: مشخص کنید که دادههایی که میخواهید صادر کنید از کجا میآیند. این ممکن است از یک پایگاه داده، یک رابط برنامهنویسی (API)، ورودی کاربر یا حتی به صورت برنامهای تولید شود. بسته به منبع، ممکن است نیاز باشد کوئریها بنویسید، JSON را تجزیه کنید یا اطلاعات فرم را پردازش کنید تا اطلاعات مورد نیاز را بازیابی کنید.
ساختار داده: دادهها را در یک ساختار منظم مانند یک آرایه چندبعدی سازماندهی کنید، به طوری که هر ردیف نمایانگر یک رکورد و هر ستون نمایانگر یک فیلد باشد. اطمینان حاصل کنید که دادهها به درستی فرمتدهی شده و یک ساختار یکنواخت دارند تا مشکلاتی هنگام وارد کردن فایل CSV به برنامههای دیگر ایجاد نشود.
اعتبارسنجی داده: اطمینان حاصل کنید که دادههایی که قرار است صادر شوند تمیز، ایمن و بدون خطا هستند. ورودی کاربر را اعتبارسنجی کنید، کاراکترهای خاص را از دست ندهید و با مسائلی مانند فیلدهای خالی یا اشتباه در نوع داده به درستی برخورد کنید.
مدیریت موارد خاص: بسته به ماهیت دادههایتان، ممکن است نیاز باشد به موارد خاصی بپردازید مانند:
در اینجا یک نمونه از محتوایی که در قالب یک آرایه چندبعدی آماده شده است، آورده شده است:
// Prepare the content to write it to CSV file. $data = array( array('محصول شماره 1', '10000', '100', '10', 'فروشنده شماره 1', '7/8/1402'), array('محصول شماره 2', '20000', '200', '10', 'فروشنده شماره 2', '7/8/1402'), array('محصول شماره 3', '30000', '300', '10', 'فروشنده شماره 3', '7/8/1402'), array('محصول شماره 4', '40000', '400', '10', 'فروشنده شماره 4', '7/8/1402'), );
این کد یک آرایه به نام data ایجاد میکند که در آن دادهها به صورت یک آرایه چندبعدی سازماندهی شدهاند. هر آرایه در data نمایانگر یک سطر از دادههایی است که قرار است در فایل CSV نمایش داده شود. هر آرایه داخلی در واقع نمایانگر ستونهای مختلف از اطلاعات مربوط به هر محصول است.
به عنوان مثال:
این نحوه سازماندهی داده به شما اجازه میدهد که دادههای مختلف را در قالب یک فایل CSV سازماندهی کنید تا به راحتی و با ساختاری منظم قابل صدور باشند.
// Clean up output buffer before writing anything to CSV file.
ob_end_clean();
این کد برای پاکسازی بافر خروجی (Output Buffer) قبل از نوشتن هر چیزی به فایل CSV استفاده میشود. وقتی ()ob_end_clean فراخوانی میشود، همه محتوایی که تا آن لحظه در بافر خروجی جمعآوری شده بوده و قبل از ارسال به مرورگر نمایش داده نمیشود، پاکسازی میشود. این کار معمولاً در مواردی انجام میشود که میخواهید مطمئن شوید که بافر خروجی خالی است و دادهای به فایل CSV نوشته میشود تا محتوای قبلی در بافر خروجی خطا ایجاد نکند.
// Create a file pointer with PHP.
$output = fopen( 'php://output', 'w' );
این کد یک نشانگر فایل به نام output با استفاده از PHP ایجاد میکند. این نشانگر فایل به منظور نوشتن دادهها به فایل CSV استفاده میشود.
این بخش نشانگر مکانیسم خاصی را مشخص میکند که به نام php://output
شناخته میشود. این مکانیسم به شما اجازه میدهد تا دادهها را به جریان خروجی (output stream) در PHP ارسال کنید. در واقع، به جای ایجاد یک فایل فیزیکی، از php://output
برای ارسال داده به مرورگر یا سایر مقاصد استفاده میشود.
این بخش نشانگر حالتی است که مشخص میکند که نشانگر فایل در حالت نوشتن باز شود. این به این معناست که میتوانید در output
دادهها را بنویسید.
// Add Persian text direction and line break settings.
// UTF-8 BOM (Byte Order Mark)
echo "\xEF\xBB\xBF"
این کد به منظور تنظیم جهت متن به فارسی و تنظیمات شکست خط استفاده میشود. در واقع، این کد یک نشانه به فایل CSV اضافه میکند تا متنهای فارسی به درستی نمایش داده شوند و به درستی به فرمت UTF-8 باشند.
این دستور یک بایت خاص به نام BOM (Byte Order Mark) را به فایل اضافه میکند. BOM یک نشانه برای تعیین ترتیب بایتها در فایل است و در فایلهای UTF-8 استفاده میشود. این بایت به نشانه اینکه متن به صورت UTF-8 ارائه شده است، کمک میکند و از اشکالات احتمالی در خواندن و نمایش متنهای چندبایتی جلوگیری میکند. در مورد متنهای فارسی و سایر زبانهای با کاراکترهای خاص، اضافه کردن BOM به متن معمولاً پیشنهاد میشود تا از مشکلات نمایش ممکن در برنامههای مختلف جلوگیری شود.
به عبارت دقیق تر، "\xEF\xBB\xBF" یک توالی سه بایتی است که به عنوان BOM در UTF-8 شناخته میشود. این توالی بایتها به مرورگر و سایر برنامهها اعلام میکند که متن باید به عنوان UTF-8 تفسیر شود. این کار باعث میشود که متنهای فارسی به درستی و بدون مشکلات در مرورگرها و نرمافزارهای مختلف نمایش داده شوند.
نوشتن هدرها به فایل CSV یک مرحله مهم است هنگامی که از PHP برای صدور دادهها استفاده میشود، چرا که اطلاعاتی در مورد دادههایی که صادر میشود ارائه میدهند. هدرها معمولاً ردیف اول فایل CSV هستند و نمایانگر نامهای ستون یا برچسبهای فیلد هستند.
// Write headers to CSV file.
fputcsv( $output, $header_args );
این کد برای نوشتن هدرها به فایل CSV استفاده میشود.
"fputcsv" :
این تابع به شما اجازه میدهد تا یک آرایه را با استفاده از ویژگیهای فایل به فایل CSV بنویسید. در اینجا، آرایه `header_args` (که شامل هدرها برای فایل CSV است) به عنوان ورودی به تابع داده میشود.
"$output":
این پارامتر نشانگر فایلی است که شما قبل از این ایجاد کردهاید و از آن به عنوان نشانگر فایل برای نوشتن به فایل CSV استفاده میشود.با اجرای این تابع، هدرهای موجود در `header_args` به فایل CSV نوشته میشوند تا ساختار فایل CSV به درستی تنظیم شود.
نوشتن دادهها به فایل CSV یک مرحله مهم در فرآیند صدور داده با استفاده از PHP است. بعد از آمادهسازی محتوا، تنظیم هدرها و پاکسازی بافر خروجی، میتوانید با نوشتن ردیفهای داده به فایل CSV ادامه دهید.
// Loop through the prepared data to output it to CSV file.
foreach( $data as $data_item ){
fputcsv( $output, $data_item );
}
این کد یک حلقه `foreach` را استفاده میکند تا از دادههای آماده شده عبور کند و آنها را به فایل CSV خروجی دهد.
// Close the file pointer with PHP with the updated output.
fclose( $output );
exit;
این کد برای بستن نشانگر فایل با استفاده از PHP و خروج از اسکریپت استفاده میشود.
"fclose( $output )" :
این دستور `fclose()` را صدا میزند تا نشانگر فایل `$output` بسته شود. این عملیت از منابع مرتبط با فایل و جریان خروجی آزاد میکند.
"exit;" :
این دستور `exit` را صدا میزند تا اجرای اسکریپت PHP به پایان برسد و برنامه تمام شود. این عملیت معمولاً برای اطمینان از اینکه اجرای برنامه بلافاصله بعد از نوشتن به فایل CSV خاتمه یابد، استفاده میشود.
من کل کد را در یک فایل ترتیب دادهام تا برای شما راحتتر شود که ویژگی صدور CSV را امتحان و تجربه کنید. به راحتی میتوانید با جایگزینی اطلاعات ثابت با دادههای پویا از پایگاه داده خود، درک خود را بیشتر کنید و آزمایشهای خود را انجام دهید.
<?php
// Start the output buffer.
ob_start();
// Set PHP headers for CSV output.
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=csv_export.csv');
// Create the headers.
$header_args = array('عنوان محصول', 'قیمت اولیه', 'موجودی', 'تخفیف', 'فروشنده', 'تاریخ ثبت');
// Prepare the content to write it to CSV file.
$data = array( array('محصول شماره 1', '10000', '100', '10', 'فروشنده شماره 1', '7/8/1402'), array('محصول شماره 2', '20000', '200', '10', 'فروشنده شماره 2', '7/8/1402'), array('محصول شماره 3', '30000', '300', '10', 'فروشنده شماره 3', '7/8/1402'), array('محصول شماره 4', '40000', '400', '10', 'فروشنده شماره 4', '7/8/1402'), );
// Clean up output buffer before writing anything to CSV file.
ob_end_clean();
// Create a file pointer with PHP.
$output = fopen( 'php://output', 'w' );
// Add Persian text direction and line break settings. echo "\xEF\xBB\xBF" // UTF-8 BOM (Byte Order Mark)
// Write headers to CSV file.
fputcsv( $output, $header_args );
// Loop through the prepared data to output it to CSV file.
foreach( $data as $data_item ){
fputcsv( $output, $data_item );
}
// Close the file pointer with PHP with the updated output.
fclose( $output );
exit;
صدور داده به فایل CSV با استفاده از PHP یک مهارت ارزشمند برای توسعهدهندگانی است که با برنامههای وب کار میکنند، زیرا این کار امکان مدیریت و به اشتراک گذاری دادهها را به طریق کارآمدی فراهم میکند.بر اساس تحقیقات اخیر، تقریباً 70٪ از برنامههای وب مبتنی بر داده از ویژگی صدور CSV برای اهداف مختلفی مانند گزارشگیری، پشتیبانگیری از داده و به اشتراک گذاری اطلاعات بین سیستمها استفاده میکنند. این پذیرش گسترده نشاندهنده اهمیت فراگیر این ویژگی برای توسعهدهندگان است.
این مقاله به زودی با قرار دادن نکات بیشتر تکمیل میشود