گیک فارسی

نوشته های یک گیک فارسی از فعالیت ها ،‌ علاقه مندی ها و نقد هایش

خواندن فایل‌های پایگاه داده dbf از طریق PHP

نویسنده:
5 می 14

این آموزش را پیرو درخواست یکی از همکاران و نیاز احتمالی دیگران روی وبلاگ میگذارم که نیاز داشت فایل‌های dbf را از طریق php بخونه و جالبه که با وجود بهره‌مندی از Linux VPS و اینکه میتونسته از طریق php-dbase کارش را انجام بده ولی به دو تا مشکل خورده. اول اینکه با سیستم عامل لینوکس آشنایی نداشته و نمیتونسته بسته های مورد نیاز را نصب کنه (از جمله دلایلی که نوشته «چرا یک برنامه نویس وب باید به مهاجرت به لینوکس فکر کنه» را نوشتم) و دوم اینکه مسئول هاست هم به هر دلیلی که داشته از نصب بسته ها با ذکر دلایل امنیتی پوچ ، طفره رفته.

قبل از کدنویسی هم برای دوستانی که آشنایی با dbf ندارند باید بگم که dbf یک نوع پایگاه داده بر پایه فایل هستش (مثل Microsoft Access) که برنامه نویسای FoxPro تحت داس و حالا Visual FoxPro ازش استفاده میکنند. توی ایران هم به خاطر نوشته شدن برنامه‌های شرکت های بیمه و دیگر نهاد‌ها با FoxPro ، خیلی‌ از برنامه نویسان که در حال ارتقاء نر م افزار های قدیمی هستند بهش بر میخورند.

یک نکته دیگه هم اینکه استفاده از php برای خوندن فایل‌های dbf فقط زمانی کاربرد داره که نیاز باشه فایل‌ها به سرور منتقل و سپس عملیاتی مثل پردازش و انتقال به MySQL و یا کلاً نمایش اطلاعاتش مطرح باشه و اگه قصد دارین فقط تبدیل کنین ، کافیه درایور های ODBC که مایکروسافت تولید کرده را نصب کنین و با یک نرم‌افزار که قابلیت Migeration داره و توی وب هم زیاده مثل MySQL Workbench اطلاعات را به جداول MySQL منتقل کنین.

برای خوندن فایل‌های dbf از این کلاس استفاده میکنیم (کلاس را من ننوشتم و اعتبارش برای سازندگان که اسامیشون توی خود فایل هست محفوظه) و با یک کد شبیه به این میتونید کل جدول را نمایش بدید.

require('./dbf_class.php');
    $dbf = new dbf_class('path_to_dbf_file');
    echo('<table border=1 cellspacing=0>');
    echo('<tr>');
    echo('<td>No.&nbsp;</td>');	
    for($j=0; $j<$dbf->dbf_num_field; $j++){
	    echo '<td>'.$dbf->dbf_names[$j]['name'].'</td>';
    }
    echo '</tr>';
    for($i=0; $i<$dbf->dbf_num_rec; $i++){
        if ($row = $dbf->getRow($i)) {
	        echo('<tr>');
        	echo('<td align="right">'.$i.'</td>');
	        for($j=0; $j<$dbf->dbf_num_field; $j++){
				echo '<td>'.htmlentities($row[$j]).'</td>';
    	    }
        	echo '</tr>';
        }
    }
    echo('</table>');

یک نکته که مجال توضیح توی این نوشته نیست و در آینده حتماً در موردش خواهم نوشت اینه که متون فارسی توی این جداول معمولاً یونیکد یا Windows-1256 نیست و از IranSystem استفاده شده. نحوه تبدیل از IranSystem به یونیکد را به زودی توی وبلاگ خواهم گذاشت.