نمایش نتایج: از شماره 1 تا 10 , از مجموع 20

موضوع: مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    عضو انجمن AtrafNet آواتار ها
    تاریخ عضویت
    Nov 2016
    نوشته ها
    259
    تشکر تشکر کرده 
    2,584
    تشکر تشکر شده 
    729
    تشکر شده در
    417 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

    سلام
    پیشنهاد میکنم از این روش خط به خط فایل رو پردازش کنید:

    کد PHP:
    <?php
    $handle 
    fopen("inputfile.txt""r");
    if (
    $handle) {
        while ((
    $line fgets($handle)) !== false) {
            
    // process the line read.
        
    }
        
    fclose($handle);
    } else {
        
    // error opening the file.
    }
    در این روش اطلاعات خط به خط خونده میشه و در متغیر line$ قرار میگیره اما خوبیش اینه که هیچ وقت نیاز به پر کردن حافظه RAM با کل 2 گیگ فایل نیست و اطلاعات فقط خط به خط buffer میشن.
    البته حتی با این روش هم با اینکه احتمالاً مشکل RAM دیگه پیش نمیاد ولی به دلیل طولانی شدن پردازش 2 گیگ فایل اگر Request با مرورگر هستش به احتمال زیاد با خطای Time Out مواجه میشه مگر اینکه حجم فایل رو تیکه تیکه تر در هر Request جدا پردازش کنید.
    منبع کد: http://stackoverflow.com/questions/1...by-line-in-php

  2. تعداد تشکر ها ازAtrafNet به دلیل پست مفید


  3. #2
    کاربر اخراج شده
    تاریخ عضویت
    Mar 2017
    نوشته ها
    36
    تشکر تشکر کرده 
    57
    تشکر تشکر شده 
    47
    تشکر شده در
    32 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

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

    کد PHP:
    <?php
    $handle 
    fopen("inputfile.txt""r");
    if (
    $handle) {
        while ((
    $line fgets($handle)) !== false) {
            
    // process the line read.
        
    }
        
    fclose($handle);
    } else {
        
    // error opening the file.
    }
    در این روش اطلاعات خط به خط خونده میشه و در متغیر line$ قرار میگیره اما خوبیش اینه که هیچ وقت نیاز به پر کردن حافظه RAM با کل 2 گیگ فایل نیست و اطلاعات فقط خط به خط buffer میشن.
    البته حتی با این روش هم با اینکه احتمالاً مشکل RAM دیگه پیش نمیاد ولی به دلیل طولانی شدن پردازش 2 گیگ فایل اگر Request با مرورگر هستش به احتمال زیاد با خطای Time Out مواجه میشه مگر اینکه حجم فایل رو تیکه تیکه تر در هر Request جدا پردازش کنید.
    منبع کد: http://stackoverflow.com/questions/1...by-line-in-php
    ایشون به دلیل حجم بالا اصلا نمیتونن فایل رو بخونن بعدا شما از کجا درومدی میگی که پرداش ؟

    اول باید داده خونده بشه تا بشه پردازشش کرد .

  4. #3
    عضو انجمن
    تاریخ عضویت
    Feb 2011
    نوشته ها
    215
    تشکر تشکر کرده 
    524
    تشکر تشکر شده 
    1,363
    تشکر شده در
    624 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

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

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

  5. تعداد تشکر ها از navid2zp به دلیل پست مفید


  6. #4
    کاربر اخراج شده
    تاریخ عضویت
    Mar 2017
    نوشته ها
    36
    تشکر تشکر کرده 
    57
    تشکر تشکر شده 
    47
    تشکر شده در
    32 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

    نقل قول نوشته اصلی توسط navid2zp نمایش پست ها
    کد اول به این دلیل با ارور مواجه میشه که کل فایل با اون دستور خونده میشه
    کدی که دوست عزیز پیشنهاد دادن کل فایل رو نمی خونه و در رم ذخیره نمی کنه بلکه فایل رو باز می کنه و هر قسمتی رو که نیاز داشته باشید می خونه
    در نتیجه اروری نمیگیرید
    توضیحاتشون رو با دقت بیشتری بخونید
    کلا فانکشن fopen نمیتونه حجم بالا بخونه !

    حالا ایشون اومدن اول خوندنش بعد اومدن لاین به لاین while کردن...

    در ضمن اصلا فرض هم بگیریم که خونده شده باشه نه نشده ! یعنی بابت هر کوئری دیتابیس قراره 2 گیگ رم خورده بشه ؟ یعنی برای داشتن 100 کاربر آنلاین حداقل حداقل باید 200 گیگ رم در نظر گرفت !

    کار باید از بیس درست باشه عزیز دل !

  7. #5
    عضو انجمن AtrafNet آواتار ها
    تاریخ عضویت
    Nov 2016
    نوشته ها
    259
    تشکر تشکر کرده 
    2,584
    تشکر تشکر شده 
    729
    تشکر شده در
    417 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

    نقل قول نوشته اصلی توسط Azade.Kaveh نمایش پست ها
    کلا فانکشن fopen نمیتونه حجم بالا بخونه !

    حالا ایشون اومدن اول خوندنش بعد اومدن لاین به لاین while کردن...

    در ضمن اصلا فرض هم بگیریم که خونده شده باشه نه نشده ! یعنی بابت هر کوئری دیتابیس قراره 2 گیگ رم خورده بشه ؟ یعنی برای داشتن 100 کاربر آنلاین حداقل حداقل باید 200 گیگ رم در نظر گرفت !

    کار باید از بیس درست باشه عزیز دل !


    درسته این روش اصلاً اصولی نیست ولی جناب من و شما نمی دونیم که استارتر برای چه کاری می خوان شاید اصلاً اونی که تو ذهن ماست یعنی یه وب سایت که قراره query رو از فایل حجیم بخونه نباشه شاید یه پروژه کار شخصی باشه.
    چون خودم بار ها کار هایی داشتم که اصلاً عمومی نبودن و تونستم به هر روش ناشیانه ای هم شده حلش کنم میگم

    درباره fopen هم استارتر گفتن fread که داده ها رو می خونه ایراد میگیره جسارتاً fopen به تنهایی وظیفه خوندن و بافر کردن داده ها رو نداره بلکه فقط یه file pointer ایجاد میکنه که باهاش کار کنیم
    http://php.net/manual/en/function.fopen.php

    لینکی هم که از stackoverflow.com در پست قبل دادم رو مطالعه کنید حجم فایل پرسش کننده در اون لینک هم 1 گیگ هستش.

  8. #6
    عضو دائم T.Toosi آواتار ها
    تاریخ عضویت
    Jun 2015
    نوشته ها
    1,071
    تشکر تشکر کرده 
    278
    تشکر تشکر شده 
    2,936
    تشکر شده در
    1,329 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

    نقل قول نوشته اصلی توسط Azade.Kaveh نمایش پست ها
    کلا فانکشن fopen نمیتونه حجم بالا بخونه !

    حالا ایشون اومدن اول خوندنش بعد اومدن لاین به لاین while کردن...

    در ضمن اصلا فرض هم بگیریم که خونده شده باشه نه نشده ! یعنی بابت هر کوئری دیتابیس قراره 2 گیگ رم خورده بشه ؟ یعنی برای داشتن 100 کاربر آنلاین حداقل حداقل باید 200 گیگ رم در نظر گرفت !

    کار باید از بیس درست باشه عزیز دل !
    سلام، fopen تنها file handle resource به شما برمیگردونه و content فایل خوانده نمیشه فقط یک اشاره گر به فایل هست و شما محدودیتی برای fopen ندارید. تنها در خواندن فایل احتیاج به مموری پیدا میکنید که این مشکل را میتوانید با فایل پوینتر با خواندن به صورت لاین به لاین که دوستمون در بالا اشاره کردند حل کنید.

  9. تعداد تشکر ها ازT.Toosi به دلیل پست مفید


  10. #7
    عضو انجمن
    تاریخ عضویت
    Feb 2011
    نوشته ها
    215
    تشکر تشکر کرده 
    524
    تشکر تشکر شده 
    1,363
    تشکر شده در
    624 پست

    پیش فرض پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

    نقل قول نوشته اصلی توسط Azade.Kaveh نمایش پست ها
    کلا فانکشن fopen نمیتونه حجم بالا بخونه !

    حالا ایشون اومدن اول خوندنش بعد اومدن لاین به لاین while کردن...

    در ضمن اصلا فرض هم بگیریم که خونده شده باشه نه نشده ! یعنی بابت هر کوئری دیتابیس قراره 2 گیگ رم خورده بشه ؟ یعنی برای داشتن 100 کاربر آنلاین حداقل حداقل باید 200 گیگ رم در نظر گرفت !

    کار باید از بیس درست باشه عزیز دل !
    خیر دوست عزیز می تونید برای فایل های حجم بالا هم استفاده کنید
    بنده برای فایل های بالای 5 گیگ هم بدون مشکل استفاده کردم

    باز دوستان توضیحات کاملتر دادند

اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 3
    آخرين نوشته: November 7th, 2017, 13:35
  2. دریافت نقشه سایت توسط file_get_contents
    توسط iroo در انجمن PHP-MySQL
    پاسخ ها: 6
    آخرين نوشته: January 21st, 2017, 13:08
  3. تابع file_get_contents چیه ؟
    توسط amirhoseyn در انجمن دايرکت ادمين DirectAdmin
    پاسخ ها: 3
    آخرين نوشته: October 8th, 2013, 13:57
  4. Warning: file_get_contents()
    توسط tehro0n در انجمن سوالات و مشکلات
    پاسخ ها: 1
    آخرين نوشته: October 11th, 2012, 02:13
  5. Warning: file_get_contents
    توسط tehro0n در انجمن سوالات و مشکلات
    پاسخ ها: 1
    آخرين نوشته: September 18th, 2012, 16:40

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •