
فرمت CSV یکی از پرطرفدارترین ساختارها برای نگهداری یا انتقال داده در کامپیوتر است. در این آموزش ۲ روش اصلی کار با CSV در PHP را یاد میگیریم تا بتوانیم محتوای csv را خوانده یا یک فایل جدید با دادههای خودمان ایجاد کنیم.
در کار با CSV معمولاً دو عملیات اصلی انجام میدهیم:
- خواندن اطلاعات از csv و نمایش یا نگهداری آنها در یک متغیر PHP (آرایهای)
- ایجاد یک csv برای ذخیرهسازی اطلاعات (مثلاً برای خروجی دادن یک گزارش از سایت)
فهرست محتوای آموزش
کار با CSV در PHP
برای خواندن و نوشتن CSV با PHP از توابع درونی این زبان استفاده میکنیم تا به راحتی به هدفمان برسیم.
در فرمت CSV از علامتها برای جداسازی دادهها استفاده میشود. عمومیترین حالت آن این است که هر سطر داده در یک خط و دادههای هر سطر با علامت کاما (,
) جدا شوند. اما بنا به نیازمان ممکن است از کاراکتر دیگری برای جداسازی استفاده کرده باشیم.
برای روند بهتر در آموزش، فرض کنید یک فایل CSV ساده با ساختار و محتوای زیر به نام employee.csv
در کنار کدهای PHP خود داریم:

در ادامه ابتدا نحوه خواندن و نگهداری اطلاعات csv را بررسی کرده و سپس روش ایجاد آن را در PHP میآموزیم.
خواندن CSV با PHP
تابع fgetcsv()
برای خواندن هر رکورد از CSV در PHP استفاده میشود. خروجی این تابع یک آرایه PHP است.
fgetcsv( $stream, $length, $separator, $enclosure, $escape);
آرگومان اول این تابع اجباری و سایر ورودیها اختیاری هستند. این ورودیها عبارتاند از:
- stream : اشارهگری به فایل که باز شده است. (از نوع دادهای resource)
- length : به جای خواندن سطر به سطر، به تعداد
$length
کاراکتر حرکت میکند. مثلاً در هر بار خواندن، فقط 15 کاراکتر را میگیرد. حالا اگر جداکنندهای داشته باشد، یک آرایه چند عضوی و در غیر اینصورت یک آرایه تک عضوی خواهیم داشت. - separator : کاراکتر جداکننده (پیشفرض
,
است.) - enclosure : علامت مشخصکننده هر سلول داده. مثلاً اگر مقدار هر سلول بین دو علامت ^ قرار گرفتهاند، در اینجا مشخص میکنیم. (پیشفرض
"
) - escape : اسکیپ کاراکترها (کاراکتر نادیدهگیرنده؛ پیشفرض
\\
)
در ابتدا باید فایل را با تابع fopen()
باز کنیم. در مورد این تابع و روشهای خواندن فایل در آموزش خواندن فایل با PHP بهطور مفصل صحبت کردهام. ورودی اول، آدرس و نام فایل و ورودی دوم mode باز کردن را مشخص میکند:
$f = fopen('employee.csv', 'r');
حالا اگر متغیر فایل را به fgetcsv()
بدهیم، آرایهای از دادههای سطر اول csv خود را در خروجی خواهیم داشت:
<?php
$f = fopen('employee.csv', 'r');
$row = fgetcsv($f);
print_r($row);
در هر بار فراخوانی این تابع روی فایل، یک سطر از csv در php خوانده میشود. شئ فایل ($f
) حاوی یک اشارهگر است تا PHP متوجه شود تا کجای یک فایل را خوانده است. (اصطلاحاً pointer) وقتی به انتهای فایل میرسیم، تابع fgetcsv()
مقدار false را برمیگرداند.
مثال کار با محتوای csv
قطعه کد زیر مثالی ساده از نمایش دادههایمان درون یک لیست است:
<?php
// Read data from CSV in PHP
$f = fopen('employee.csv', 'r');
fgetcsv($f); // Remove First Row
echo "<ul>";
while( $employee = fgetcsv($f) ){
echo "<li>{$employee[1]} ({$employee[3]})</li>";
}
echo "</ul>";
fclose($f);
همیشه خوب است در انتهای کارمان فایلی را که با fopen()
باز کرده بودیم ببندیم.

در هر بار اجرای حلقه while یک سطر از دادهها در متغیر $employee
ریخته میشود. در بدنه به اندیسهای موردنظرمان دسترسی پیدا کرده و آنها را چاپ کردهایم. وقتی به انتها برسیم، مقدار متغیر false شده و حلقه اجرا نخواهد شد. (اگر با حلقهها آشنا نیستید، جلسه حلقه در PHP را ببینید.)
تبدیل csv به آرایه
اگر بخواهیم همه یا بخشی از سطرها را درون یک آرایه چند بعدی قرار دهیم، میتوانیم مشابه قطعه کد زیر عمل کنیم:
<?php
$f = fopen('employee.csv', 'r');
fgetcsv($f); // Remove First Row
$data = [];
while( $row = fgetcsv($f) ){
$data[] = $row
}
fclose($f);
ساخت و نوشتن CSV در PHP
برای ایجاد csv با PHP از تابع fputcsv()
استفاده میکنیم. مشابه تابع قبلی، این تابع اشارهگر به فایل مورد نظر را گرفته و دادههایمان را در فرمت csv مینویسد.
fputcsv( $stream, $fields, $separator, $enclosure, $escape );
این تابع ۵ آرگومان ورودی دارد که دو تای اول ضروری و بقیه اختیاری هستند:
- stream : اشارهگر به فایل
- fields : آرایهای از دادهها (معمولاً رشته PHP هستند.)
- separator : جداکننده فیلدها از هم
- enclosure : علامت نگهدارنده هر فیلد
- escape : اسکیپ کاراکتر
خروجی fputcsv()
در صورت موفقیتآمیز بودن عملیات نوشتن، یک عدد (تعداد کاراکترهای نوشتهشده) و در صورت مشکلدار بودن false خواهد بود.
در قطعه کد زیر سه مجموعه داده آزمایشی را در فایلی به نام new.csv
مینویسم:
<?php
// Write data into CSV with PHP
$data = [
['omid', '35741', 'Pending'],
['Mohsen', '77394', 'Complete'],
['Ghazal', '14557', 'Complete'],
];
$f = fopen('new.csv', 'w'); // Open File in Write Mode
foreach( $data as $row ){
fputcsv( $f, $row );
}
fclose($f);
دقت کنید که اینجا برای باز کردن فایل csv در php از مد w برای نوشتن استفاده کردهام.
میتوانیم کدهایی که تا اینجا نوشتیم را کمی حرفهایتر کنیم! مثلاً اگر مشکلی در باز کردن فایل داشتیم، برنامه را متوقف کنیم؛ چیزی شبیه قطعه کد زیر: (بیشتر بدانید: ساختار شرط در PHP)
<?php
$data = [
['omid', '35741', 'Pending'],
['Mohsen', '77394', 'Complete'],
['Ghazal', '14557', 'Complete'],
];
$f = fopen('new.csv', 'w');
if($f === false){
die('File Openning Failed!');
}
foreach( $data as $row ){
echo fputcsv( $f, $row );
echo '<br>';
}
fclose($f);
// output:
// 19
// 22
// 22
اینجا خروجی تابع را echo کردهام تا ببینیم برای هر سطر چه نتیجهای داریم. در خط اول 19 کاراکتر و در دوتای بعدی 22 کاراکتر در فایل نوشته شده است.
در موارد پیشرفتهتر میتوان از بحث مدیریت خطا با try catch در PHP نیز استفاده کرد.
شاید بگویید خودمان میتوانیم مستقیماً با فایل کار کنیم؛ شبیه کار با فایل در PHP. برای خواندن باید دادههای هر خط را با علامت جداکننده جدا کنیم؛ همچنین موقع نوشتن بین دادههای هر سطر کاراکتر مورد نظرمان را قرار دهیم. بله میشود؛ اما چرا از راه سادهتر استفاده نکنیم؟! 😉
برای جزئیات بیشتر این توابع میتوانید به مستندات آنها (برای fgetcsv()
اینجا و برای fputcsv()
اینجا) مراجعه کنید.
امیدوارم پس از این آموزش بتوانید به راحتی با فایلهای CSV در PHP کار کنید. اگر سؤال یا تجربهای درباره این آموزش دارید، از طریق دیدگاهها با ما و دوستانتان به اشتراک بگذارید. 🙂
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم