PDA

View Full Version : مشکل در استفاده از file_get_contents



siampour
شنبه 14 آذر 1394, 13:58 عصر
سلام من یه پایگاه داده دارم که 2000 تا سطر داره و برای هر کدوم باید دو تا کار بکنم اول اینکه اطلاعاتشون را از یه سرور دیگه با file_get_contents در بیارم بعد با web service یک پنل اس ام اس برای هر کدوم از این سطر ها به شماره هاشون پیام مناسب بفرستم

مشکلم اینه وقتی تعداد کمی از سطر ها را انتخاب میکنم مثلا زیر 100 تا این کارو میکنه ولی وقتی کل 2000 تا میخوام این کارو انجام بدم بعد از چند ثانیه اررو internal server error میده بهم
البته مشکل فقط استفاده از
file_get_contents نیست اگر فقط بخواهم با وب سرویس در یک لحظه 2000 در خواست بفرستم هم همین مشکل را دارم

چی کار کنم درست بشه ؟

ممنون

Unique
شنبه 14 آذر 1394, 15:42 عصر
اولا باید شماره خطای Internal Server Error را بدی ! مثلا ممکنه ۵۰۰ باشه یا هر شماره دیگه ای ، بعدشم این خطا عموما مربوط به Web Server میشه و از طریق Log های سمت سرور باید بررسی بشه.

siampour
شنبه 14 آذر 1394, 15:50 عصر
اولا باید شماره خطای Internal Server Error را بدی ! مثلا ممکنه ۵۰۰ باشه یا هر شماره دیگه ای ، بعدشم این خطا عموما مربوط به Web Server میشه و از طریق Log های سمت سرور باید بررسی بشه.
شماره 500
و همچنین

Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.

us1234
شنبه 14 آذر 1394, 15:54 عصر
اگر مثلا چند ثانیه طول میکشه و بعد ارور میده حدس میزنم باید مدت اجرای پروسه را زیاد کنید ( فکر نکنم روی هاست اشتراکی دسترسی داشته باشید )


@set_time_limit(0);

@ini_set('max_execution_time',0);

البته اگر ارور از سمت مقصد در وب سرویس باشد مشکل به این سادگی قابل حل نیست و باید ببیند در مقصد در لاگ ها مشکل از چی بوده

siampour
شنبه 14 آذر 1394, 16:03 عصر
اگر مثلا چند ثانیه طول میکشه و بعد ارور میده حدس میزنم باید مدت اجرای پروسه را زیاد کنید ( فکر نکنم روی هاست اشتراکی دسترسی داشته باشید )


@set_time_limit(0);

@ini_set('max_execution_time',0);

البته اگر ارور از سمت مقصد در وب سرویس باشد مشکل به این سادگی قابل حل نیست و باید ببیند در مقصد در لاگ ها مشکل از چی بوده


مشکل در وب سرویس نیست چون من این کاری که انجام میدم دو تا کار روی دو تا وب سرویس مختلفه . وقتی برای هر 2000 تا میخوام درخواست بدم مشکل داره اگه درخواست ها را کم کنم مثلا 100 تا دیگه مشکل ندارم و جواب میده

همین 100 تا درخواست هم چند ثانیه طول میکشه که همش را بررسی کنه

ravand
شنبه 14 آذر 1394, 19:03 عصر
نمیدونم دقیقا مشکل شما چیه؟
ولی این کارها رو باید انجام بدی:
قبل از استفاده از تابع file_get_contents باید اون رو بررسی کنی:

if (file_get_contents($file) != null) {
بعد اگر حجم فایل sql شما زیاد باشه باید فایل php.ini را به این شکل تغییر بدی:


post_max_size = 8M
upload_max_filesize = 2M
max_execution_time = 30
max_input_time = 60
memory_limit = 8M

Change to:
post_max_size = 750M
upload_max_filesize = 750M
max_execution_time = 5000
max_input_time = 5000
memory_limit = 1000M

مشکل حل نشد اینم تغییر بده:

F:\xampp\mysql\bin\my.ini

max_allowed_packet = 10M

siampour
شنبه 14 آذر 1394, 20:29 عصر
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $code = $row['code'];
$number = $row['number'];
$user = json_decode(file_get_contents($url . $code), true); //gereftane pld in code
$parameters['text'] = $user['pld'];
$parameters['to'] = array('string' => $number);
$client->SendSms($parameters)->SendSmsResult; //ersal sms pld marboote
}

کد را از یه سرور دیگه میگیره و توسط یه وب سرویس دیگه اس ام اس میکنه

برای 100تا مشکل نداره ولی برای 2000 تا که میشه چند ثانیه طول میکشه و internal server error 500 میده

us1234
شنبه 14 آذر 1394, 21:04 عصر
عمدتا وب سرویس ها قابلیت ارسال گروهی دارند ، یعنی یک آرایه از شماره ها و متن ها به وب سرویس میدهید و در یک زمان پنل به تمام شماره ها ارسال میکند .

شما هم مستندات وب سرویس را مطالعه کنید و با ارسال گروهی کار کنید .

مشکل شما همان زمان اجرا پروسه است که بعد از گذشت چند ثانیه پروسه Kill میشود .

Unique
شنبه 14 آذر 1394, 22:32 عصر
جای شما بودم از شرکت ارائه دهنده خدمات هاست میخواستم که خطاهای مربوط به سایتتون را توی وان بازه ای که خطا گرفتین بهتون بده ! اینطوری میشه فهمید مشکل چی بوده. حتی اگه خطای timeout باشه نباید خطای 500 بده و نشون از کانفیگ ضعیف شرکت هاستینگ شما داره.