PDA

View Full Version : سوال: برای اجرای کدهای حجیم چه کرد



djsaeedkhan
دوشنبه 28 فروردین 1391, 14:23 عصر
با سلام
لطفا بفرمایید برای اجرای کدهای حجیم چه کرد تا با خطای Script Timeout Error روبرو نشد.
لطفا اگر می دونید بفرمایید همین عبارت به انگلیسی چی میشه تا خودمم سرچ کنم

با سپاس

MMSHFE
دوشنبه 28 فروردین 1391, 16:06 عصر
این کد رو اول اسکریپتتون بگذارین و بجای 600 زمان موردنظر رو برای اجرای اسکریپت برحسب ثانیه تعیین کنید (600 یعنی 10 دقیقه) :

set_time_limit(600);
موفق باشید.

djsaeedkhan
دوشنبه 28 فروردین 1391, 16:24 عصر
با سلام
این رو می دونم ولی چون از هاست رایگان استفاده می کنم اجازه همچین کدی رو نمیده واسه همین خواستم ببینم چیزی هست تکه تکه ای کد ها رو اجرا کنه
یا اینکه چون کد های من درون حلقه قرار دارن و تعداد اجراشون زیاده کاری کرد که پایان هر حلقه بشه درصد انجام کار رو هم نشون بده (sleep فایده نداره)

MMSHFE
دوشنبه 28 فروردین 1391, 16:31 عصر
میتونید انتهای هر حلقه از flush استفاده کنید تا خروجی رو تا اونجا برای مرورگر بفرسته.

djsaeedkhan
سه شنبه 29 فروردین 1391, 01:35 صبح
سلام
بازم تشکر ولی مشکل من حل نشد
تونستم کاری کنم که در انتهای حلقه اطلاعاتی رو نمایش بده (مثل پروسس بار)
ولی الان متوجه شدم مشکل اصلی این هست که در یک خط ،اطلاعات یک فایل از اینترنت گرفته میشه. و بعد وارد حلقه ای که در پست قبل گفتم میشه.
الان چون حجم دریافتی بالا هست این مشکل ایجاد میشه.

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


$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $tags);
xml_parser_free($parser);

------->while (xml_parse_into_struct($parser, $data, $values, $tags))
echo "Please Wait";

MMSHFE
سه شنبه 29 فروردین 1391, 08:49 صبح
به اون شکلی که میخواین نه ولی یک راه حل مناسبتر دارین و اون اینکه با fopen فایل رو باز کنید و قسمتی از اون رو بخونید و پردازش کنید و بعد با ftell ببینید توی کدوم موقعیت فایل هستین و اون رو بعنوان نتیجه، echo کنید. دفعه بعد با fseek به همون محل برگردین و از اونجا به بعد رو بخونید تا زمانی که فایل تمام بشه. مثال:
فایل readlong.php :


<?php
if(!isset($_GET['file'])) {
die('No file specified');
}
$fp = fopen($_GET['file'], 'r');
if(!$fp) {
die('Unable to access to the file.');
}
$pos = isset($_GET['pos']) && is_numeric($_GET['pos']) ? (int) $_GET['pos'] : ftell($fp);
if(@fseek($fp, $pos) == -1 && $pos > 0) {
fread($fp, $pos);
}
$line = fgets($fp);
echo ftell($fp).' '.$line;
fclose($fp);
?>

و فایلی که با کمک اون، محتویات رو با روش AJAX میخونه:


<!doctype html>
<html>
<head>
<title>Read Long DEMO</title>
<meta charset="utf-8"/>
<script src="jqmin.js" type="text/javascript"></script>
<script type="text/javascript">
function htmlEntities(str) {
return String(str).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
}
function read(file, pos) {
$.ajax({
type: "get",
url: "readlong.php",
data: "file="+file+"&pos="+pos,
success: function(data) {
if(data != "@@@end@@@") {
var position = parseInt(data.substr(0, data.indexOf(" ")));
var content = data.substr(data.indexOf(" ") + 1);
$("#content").html($("#content").html()+"\n"+htmlEntities(content));
if(position > pos) {
setTimeout("read(\""+file+"\", "+position+");", 100);
}
}
}
});
}
$(document).ready(function() {
$("#read").click(function() {
$("#content").html("");
read($("#file").val(), 0);
});
});
</script>
</head>
<body>
<input id="file" type="text"/>
<input id="read" type="button" value="Read"/>
<div id="content" style="border: solid thin; height: 250px; line-height: .75em; overflow-y: scroll; white-space: pre;">&nbsp;</div>
</body>
</html>

موفق باشید.