• 0
هدف الشمالي

كيف أزيد وقت الإنتظار عند إنشاء ملف PDF

سؤال

عندي مشروع فيه طلاب كثير , ولما كنا نجرب مع عدد قليل من الطلاب كانت التقارير تظهر بدون مشاكل , وعند التطبيق العملي وزيادة عدد الطلاب بدأت المشكلة بالظهور ,

 

فلما نطلب تقرير  بطلاب مجمع واحد يظهر التقرير , ولكن لما نطلب تقرير لطلاب جميع المجمعات يظهر الخطأ التالي :

Network Error (tcp_error)

A communication error occurred: "Operation timed out" 

The Web Server may be down, too busy, or experiencing other problems preventing it from responding to requests. You may wish to try again at a later time.

For assistance, contact your network support team

 

 

والخطأ يظهر بعد 33 ثانية تقريبًا من طلب التقرير , وهذا هو الكود المسأول عن طباعة التقرير :

<?phprequire_once('./tcpdf/tcpdf.php');require_once('./DBConnect.php');require_once('./StudentsInfo.php'); $tital ='';if(!empty($_POST['ComplexName'])) {      $ComplexName = $_POST['ComplexName'];    $tital=$ComplexName;if($_POST['ComplexName']=='ch'){    $ComplexName ='جميع طلاب المجمعات';     $stud = new StudentsInfo();     $upit = $stud->getA();     $tital=$ComplexName;}  else {    $upit = "SELECT * FROM students WHERE ComplexName ='$ComplexName';";   }} if(!empty($_POST['StNO'])) {           $StNO = $_POST['StNO'];    $upit = "SELECT * FROM students WHERE StudentNO ='$StNO';";      $tital='رقم الإثبات     '.$StNO;}        $con = new DBConnect();        $result = mysql_query($upit);$con->close();// create new PDF document$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// set document information// Extend the TCPDF class to create custom Header and Footerclass MYPDF extends TCPDF {    //Page header    public function Header() {        // Logo//        $image_file = '../images/atko.gif';//        $this->Image($image_file, 15, 5, 30, '', 'gif', '', 'T', false, 300, '', false, false, 0, false, false, false);    }    // Page footer    public function Footer() {        // Position at 15 mm from bottom        $this->SetY(-15);        // Set font        $this->SetFont('dejavusans', 'I', 10);        // Page number        $this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');    }}// create new PDF document$pdf = new MYPDF('l', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);// set document information// set default header data$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);// set header and footer fonts$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));// set default monospaced font$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);//set margins//$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);$pdf->SetMargins(PDF_MARGIN_LEFT, 40, PDF_MARGIN_RIGHT);$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);//set auto page breaks$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);//set image scale factor$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);//set some language-dependent strings//$pdf->setLanguageArray($l);// ---------------------------------------------------------// set font$fontname = $pdf->addTTFfont('./tcpdf/fonts/aealarabiya.php', 'TrueTypeUnicode', '', 96);$pdf->SetFont($fontname, '', 14, '', false);// add a page$pdf->AddPage();$pdf->Cell(0,5,'المملكة العربية السعودية',0,1,'R');$pdf->Cell(0,5,'الجمعية الخيرية لتحفيظ القرآن الكريم بمنطقة الحدود الشمالية',0,1,'R');$pdf->writeHTML('<br>', true, false, false, false, '');$pdf->writeHTML('<hr>', true, false, false, false, '');$pdf->Cell(0,5,$tital,0,1,'C');$tbl_header = '<style>table {   border-collapse: collapse;   border-spacing: 0;   margin: 0 10px;}tr {   padding: 3px 0;}th {   background-color: #CCCCCC;   border: 1px solid #F5820F;   color: #333333;   font-family: trebuchet MS;   font-size: 14px;      text-align: left;}td {   background-color: #EEEEEE;   border: 1px solid #F5820F;   font-size: 16px;   color: #5511FF;   }</style><br><br><table id="gallerytab" cellpadding="5" border="0"><tr>      <th>نهاية الحفظ</th>                <th>الفصل 3 <br>الفترة 2</th>          <th>نهاية الحفظ</th>        <th>الفصل 3 <br>الفترة 1</th>                        <th>نهاية الحفظ</th>              <th>الفصل 2 <br>الفترة 2</th>           <th>نهاية الحفظ</th>        <th>الفصل 2 <br>الفترة 1</th>               <th>نهاية الحفظ</th>               <th>الفصل 1 <br>الفترة 2</th>         <th>نهاية الحفظ</th>        <th>الفصل 1 <br>الفترة 1</th>                     <th>بداية الحفظ</th>       <th>اسم الحلقة</th>       <th>اسم المجمع</th>       <th>اسم الطالب</th>       <th>رقم الإثبات</th>     </tr>';$tbl_footer = '</table>';$tbl = '';while ($row= mysql_fetch_assoc($result)) {$tbl .= '   <tr>      <td>'.$row['Saving3B'].'</td>             <td>'.$row['Term3B'].'</td>   <td>'.$row['Saving3A'].'</td>   <td>'.$row['Term3A'].'</td>             <td>'.$row['Saving2B'].'</td>             <td>'.$row['Term2B'].'</td>    <td>'.$row['Saving2A'].'</td>   <td>'.$row['Term2A'].'</td>            <td>'.$row['Saving1B'].'</td>             <td>'.$row['Term1B'].'</td>   <td>'.$row['Saving1A'].'</td>   <td>'.$row['Term1A'].'</td>          <td>'.$row['SaveStart'].'</td>   <td>'.$row['RingName'].'</td>   <td>'.$row['ComplexName'].'</td>   <td>'.$row['StudentName'].'</td>   <td>'.$row['StudentNO'].'</td>       </tr>';}// output the HTML content$pdf->writeHTML($tbl_header . $tbl . $tbl_footer, true, false, false, false, '');//$pdf->lastPage();// ---------------------------------------------------------//Close and output PDF document$pdf->Output('tablica_teren.pdf', 'I');?>

ولم أستطع حل المشكلة .

تم تعديل بواسطه هدف الشمالي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

8 إجابة على هذا السؤال .

  • 0

يظهر أنك تولد ملف الـpdf لكل طلب وتعيد توليده مع كل طلب، هذا يأخذ وقت ويضيع مصادر الخادم. هناك بعض الأشياء التي يمكنك عملها مثل بدلاً من عرض تقرير pdf، اعرض تقرير html عادي وانتظر إلى أن يطلب المستخدم تقرير الـpdf. أيضاً بدلاً من إعادة توليد التقرير في كل مرة اعمل له تخزين مؤقت caching، ويمكنك أن تنشيء عملية جانبية تجهز تقارير الـpdf وتخبر المستخدم أن ينتظر أن يجهز التقرير ثم ترسلة له عن طريق البريد أو تجهزها له مسبقاً إذا كنت تعرف كيف سيبدو التقرير.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أشكرك على النصائح ولكن هذا مايريدونه أصحاب الموقع ,

 

بحثت ووجدت أن المدة الإفتراضية للإنتظار هي 30 ثانية وإذا أردت تغييرها هناك أكثر من طريقة , ولكن للأسف لم تنجح معي .

 

أرجو من الله أن أجد عندكم الحل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هناك إعداد اسمه max_execution_time مسؤول عن إيقاف السكربت بعد مدة معينة وإفتراضياً محدد بـ30 ثانية.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

فعلًا الحل نجح ولكن على الخادم المحلي فقط , انظر لهذا الكود :

<?php$row=1;while ($row= 1) {}?> 

حلقة لانهائية كما هو واضح , وعند تشغيل المثال يستمر حتى 30 ثانية ثم يتوقف عن العمل وتظهر الرسالة التالية :

 

Fatal error: Maximum execution time of 30 seconds exceeded in C:\xampp\htdocs\JmaeahAlthfedh-phpWEB_5\newPHPClass.php on line 6

 

وأما إذا استخدمنا max_execution_time هكذا :

<?php$row=1;ini_set ( 'max_execution_time', 60);while ($row= 1) {}?> 

فإن الصفحة لاتتوقف إلا بعد 60 ثانية , وتظهر الرسالة التي توضح أن العمل توقف بعد 60 ثانية وليس 30 , وهذه الرسالة :

 

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\JmaeahAlthfedh-phpWEB_5\newPHPClass.php on line 6

 

المشكلة الآن أنه عندما أعمل على الخادم الحقيقي فلا يتغير بل التوقف يكون بعد 30 ثانية في كل الحالات .

تم تعديل بواسطه هدف الشمالي
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هناك تنبيه في الصفحة عن أنها لن تعمل مع ini_set إذا كان الوضع الآمن مفعل، يلزم إغلاقه أو تعديل المدة يدوياً من ملف الـphp.ini.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لماذا لا تجرب انشاء ملف .htaccess

وداخله مثلا 

php_value memory_limit 1024M
php_value post_max_size 1024M
php_value upload_max_filesize 1024M
php_value max_execution_time 800

 

طبعا انت غير القيم مثل ما تريد لانني استخدمت القيم في موقع لادارة مكتبة موسيقية

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحقيقة راسلت شركة الإستضافة وتبين أن المشكلة من عندهم , ورفضو تعديل المدة , إلا بعد ترقية الحساب , وكان المبلغ المطلوب كبير .....

 

من يعرف إستضافة لديها الـ Maximum execution time أكثر من 30 ثانية وأسعارها معقولة فليدلنا عليها .... 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ابتزاز لا اكثر اخي ,

هناك شركات كثيرة تعطيك ميزة التعديل على php.ini  جودادي احدها اعتقد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .