-
March 29th, 2017, 23:24
#1
مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت
سلام دوستان بنده نیاز دارم فایلی حجیم رو در php بخونم . متاسفانه fread و file_get_contents هر دو ارور 2 گیگ رو میدن
مثل ارور زیر
کد:
Warning: file_get_contents(): content truncated from 7351551328 to 2147483647 bytes in
چطوری میتونم این محدودیت رو بردارم ؟
سرور اختصاصی هست
-
-
March 29th, 2017 23:24
# ADS
-
March 29th, 2017, 23:43
#2
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت
جسارتا چه داده ای هست ؟ نوع فایل رو بفرمایید تا راهکار اساسی اعلام گردد
-
تعداد تشکر ها از Azade.Kaveh به دلیل پست مفید
-
March 29th, 2017, 23:57
#3
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت
-
-
March 30th, 2017, 00:05
#4
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

نوشته اصلی توسط
hoka
text هست قربان
خوب کارتوناشتباهه عزیز واسه داده های متنی حجیم سعی کنید به صورت تفکیک شده و حدالامکان از دیتابیس استفاده کنید.
توضیح بیشتری بدین تا روش های بهینه سازی و تقسیم اطلاعات رو بدیم خدمتتون.
-
-
March 30th, 2017, 00:22
#5
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت
ما از دیتابیس فایل هارو آوردیم روی فایل به دلیل سرعت بیشتر . فعلا راه حل همین هست که فایل رو کامل بدون لیمیت بخونیم
-
-
March 30th, 2017, 10:46
#6
عضو انجمن
پاسخ : مشکل : لیمیت بودن 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
-
تعداد تشکر ها ازAtrafNet به دلیل پست مفید
-
March 30th, 2017, 13:18
#7
پاسخ : مشکل : لیمیت بودن 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
ایشون به دلیل حجم بالا اصلا نمیتونن فایل رو بخونن بعدا شما از کجا درومدی میگی که پرداش ؟
اول باید داده خونده بشه تا بشه پردازشش کرد .
-
-
March 30th, 2017, 13:23
#8
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

نوشته اصلی توسط
Azade.Kaveh
ایشون به دلیل حجم بالا اصلا نمیتونن فایل رو بخونن بعدا شما از کجا درومدی میگی که پرداش ؟
اول باید داده خونده بشه تا بشه پردازشش کرد .
کد اول به این دلیل با ارور مواجه میشه که کل فایل با اون دستور خونده میشه
کدی که دوست عزیز پیشنهاد دادن کل فایل رو نمی خونه و در رم ذخیره نمی کنه بلکه فایل رو باز می کنه و هر قسمتی رو که نیاز داشته باشید می خونه
در نتیجه اروری نمیگیرید
توضیحاتشون رو با دقت بیشتری بخونید
-
تعداد تشکر ها از navid2zp به دلیل پست مفید
-
March 30th, 2017, 13:29
#9
پاسخ : مشکل : لیمیت بودن file_get_contents و fread به 2 گیگابایت

نوشته اصلی توسط
navid2zp
کد اول به این دلیل با ارور مواجه میشه که کل فایل با اون دستور خونده میشه
کدی که دوست عزیز پیشنهاد دادن کل فایل رو نمی خونه و در رم ذخیره نمی کنه بلکه فایل رو باز می کنه و هر قسمتی رو که نیاز داشته باشید می خونه
در نتیجه اروری نمیگیرید
توضیحاتشون رو با دقت بیشتری بخونید
کلا فانکشن fopen نمیتونه حجم بالا بخونه !
حالا ایشون اومدن اول خوندنش بعد اومدن لاین به لاین while کردن...
در ضمن اصلا فرض هم بگیریم که خونده شده باشه نه نشده ! یعنی بابت هر کوئری دیتابیس قراره 2 گیگ رم خورده بشه ؟ یعنی برای داشتن 100 کاربر آنلاین حداقل حداقل باید 200 گیگ رم در نظر گرفت !
کار باید از بیس درست باشه عزیز دل !
-
-
March 30th, 2017, 13:50
#10
عضو انجمن
-