گیک فارسی

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

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

8 دیدگاه‌ها

این آموزش را پیرو درخواست یکی از همکاران و نیاز احتمالی دیگران روی وبلاگ میگذارم که نیاز داشت فایل‌های 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 به یونیکد را به زودی توی وبلاگ خواهم گذاشت.



برچسب‌ها:

  1. مسعود گفت:

    آقا بسیار عالی
    خیلی در درک ساختار فایلهای بیمه کمکم کرد.

    ضمنا برای دوستانی که نیاز دارن کاراکترهای فایل بیمه رو بخونند (IranSystem) از این کلاس می تونید استفاده کنید :
    https://github.com/webafrooz/IranSystemConvertor

  2. محمد جواد گفت:

    سلام

    ممکنه طریقه نوشتن اطلاعات توی فایل dbf رو بگید

    یه فرم داریم توی یه سایت که قراره یه خروجی dbf ازش بگیریم برای یه سیستم اتوماسیون

    تشکر

    1. یونیک Administrator گفت:

      کلاسی که توی متن اصلی بهش اشاره شده فقط برای خوندن هست اما میتونی از این کلاس توی github هم استفاده کنین که امکان نوشتن هم میده اما من ازش استفاده نکردم ولی باید کار بده.

      1. جلالی گفت:

        سلام و خسته نباشید
        واقعا مفید بود

        من تمامی عملیات رو برای فایل ها بیمه انجام دادم

        لیست رو کامل درست کردم راحت هم اونو میخونم

        فقط مشکلی که برام پیش میاد وقتی از طریق سایت بیمه فایل رو ارسال میکنم خطای “کد کارگاه مشکل دارد” رو نمایش میده؟

        نمیدونم مشکل چیه

        میتونید راهنمایی کنید ممنون میشم خیلی گیر اینم

      2. جلالی گفت:

        سلام
        خیلی ممنون از راهنمایی شما واقعا بدرد خورد

        فقط یه مشکلی که من دارم موقعی که فایل از طریق پورتال بیمه ارسال میکنم
        خطای “فیلد کد کارگاه مشکل دارد” را می دهد
        خطاهش اینه “unparsableDetail;WR_WORKSHOP_CODE”

        لطف می کنید یه راهنمایی بفرمایید.

      3. یونیک Administrator گفت:

        من از صحبت شما استنباط میکنم که خطا سمت سایت پورتال بیمه دریافت میشه! اولا چقدر عجیب که خطا‌های پایگاه را اینطور به صورت raw نشون میده به شما و دوما اینکه ۹۰٪ مشکل باید از مقداری در یکی از سطور اطلاعاتی شما در فیلد مورد نظر باشه که فرمت ماسبی نداره ، حالا ممکنه خالی باشه ،‌ممکنه null باشه یا ممکنه پورتال بیمه مقدار عددی میخواد و نمیتونه مطابقت بده یا بر عکس! چون دسترسی به کد روی پورتال ندارین نمیتونین دیباگ کنین اما میتونید با آنالیز اطلاعاتی که میفرستون (روی اون فیلد) و سعی و خطا مشکل را پیدا کنید.
        موفق باشین

        پانویس: عذر میخوام دیر جواب میدم ، مشغله کاری زیاد هست و سایت را دیر به دیر چک میکنم.

      4. مهدی گفت:

        درود به شما و مطلب مفیدتون. ممنون
        فقط یه سوال. من میخوام فایل DBF ایجاد کنم. از لاراول هم استفاده میکنم. از این کلاسی که معرفی کردید در گیت هاب بررسیش کردم. نحوه نصب با کامپوزر رو گفته. همونو انجام دادم ولی موقع استفاده از کلاس خطا میده که کلاس رو پیدا نمیکنه. use هم شده ولی خطا میده. انگار اصلا تو لاراول اضاف نمیشه. میشه لطفا راهنمایی بفرمایید. ممنونم

      5. یونیک Administrator گفت:

        سلام ،‌متاسفانه تجربه‌ای در لاراول ندارم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *