2016-01-12 3 views
1

У меня есть два файла. Один - index.php, а другой - display.php. Index.php содержит форму и после отправки, она генерирует значение json и отображает это в текстовом поле, поэтому я могу редактировать, прежде чем нажимать кнопку «сгенерировать», и перенаправляет меня на display.php, где цикл for генерирует html в соответствии с опубликованными данными о сыне. Он отлично работает с до 3-х позиций, но если я использую 4 или более, это приводит к фатальной ошибке с ограничением памяти. Как я все еще получал ошибки после увеличения лимита, я попытался следующие на display.php:JSON вызывает ошибку памяти

ini_set('memory_limit', '-1'); 
set_time_limit(0); 

После этого, он падает меня ошибка 503 - услуга недоступна. Я не знаю, что делать, я прошу вашей помощи.

index.php:

<meta charset="utf-8"> 
<style> 
    pre, textarea { background-color:#31495D;min-height:300px;color:white;margin-bottom:50px;padding:25px;width:100%;display:block;border-bottom:5px solid #A058B3; } 
    .submit { padding:15px;background-color:green;color:white;border:none;font-size:12px;width:150px;margin:0 auto;margin-top:15px;margin-bottom:15px } 
</style> 
<?php 

$json   = json_encode($_POST, JSON_PRETTY_PRINT, JSON_UNESCAPED_UNICODE); 
echo " 
<h2>JSON for template</h2> 
<form action='display.php' method='post'> 
    <textarea name='json'>$json</textarea> 
    <input class='submit' type='submit' value='Generate Template'> 
</form> 
"; 

$json   = json_decode($json, true); 


?> 

<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 
<script> 
$(document).ready(function() { 
    var max_fields  = 10; //maximum input boxes allowed 
    var wrapper   = $(".input_fields_wrap"); //Fields wrapper 
    var add_button  = $(".add_field_button"); //Add button ID 

    var x = 1; //initlal text box count 
    $(add_button).click(function(e){ //on add input button click 
     e.preventDefault(); 
     if(x < max_fields){ //max input box allowed 
      x++; //text box increment 
      $(wrapper).append('<div><input type="text" name="url[]" placeholder="http://www.example.com/"/><input type="text" name="name[]" placeholder="Name"/><input type="text" name="subtext[]" placeholder="Subtext"/><input type="text" name="image[]" placeholder="Image URL"/><a href="#" class="remove_field">Remove</a></div>'); //add input box 
     } 
    }); 

    $(wrapper).on("click",".remove_field", function(e){ //user click on remove text 
     e.preventDefault(); $(this).parent('div').remove(); x--; 
    }) 
}); 
</script> 

<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post"> 
<label>Title of Block <input type="text" name="title"></label><br> 
<label>Heading of Block <input type="text" name="heading"></label><br><br> 

<div class="input_fields_wrap"> 
    <button class="add_field_button">Add More Fields</button> 
    <div><input type="text" name="url[]" placeholder="http://www.example.com/"/><input type="text" name="name[]" placeholder="Name"/><input type="text" name="subtext[]" placeholder="Subtext"/><input type="text" name="image[]" placeholder="Image URL"/></div> 
</div> 
<br><br> 

    <input type="submit" value="Generate Code"> 
</form> 

И display.php

<?php 

$json = json_decode($_POST['json'], true);     
$c = count($json); 
$i = 0; 
$rows = 3; 


$content = "<table>"; 

for($i=0; $i < count($json["name"]); $i++) { 


    $content .= 

    '<td width="226" valign="top" style="padding:5px;padding-bottom:20px;" class="m-stack m-pad-b"> 
     <table width="100%" cellpadding="0" cellspacing="0" border="0"> 
      <tr> 
       <td style="font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:22px;padding-bottom:5px; mso-line-height-rule:exactly; line-height: 18px; padding-top: 8px;"> 
       <a href="'.$json['url'][$i].'" target="_blank" style="text-decoration:none;color:#0896ff; display:block;"> 
       '.$json['name'][$i].'<br><span style="color: #7d90a6; font-size: 14px;">'.$json['subtext'][$i].'</span> 
       </a> 
       </td> 
      </tr> 
      <tr> 
       <td background="'.$json['image'][$i].'" width="226" height="226" valign="top" style="background-size:cover; background-position:center center; border-radius:6px 6px 0 0;" class="m-ufi-bg"> 
       <!--[if gte mso 9]> 
       <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="width:226px;height:226px;"> 
        <v:fill type="frame" src="'.$json['image'][$i].'" color="#7bceeb" /> 

       </v:rect> 
       <![endif]--> 
       </td> 
      </tr> 


     </table> 
    </td> 
    '; 
    if($i == 3) { $content .= '</tr><tr>'; unset($i); $i == 0; } 

    } 
    echo "</table>"; 

echo $content; 

Это просто эксперимент для меня, любое предложение/критика приветствуется. Заранее спасибо.

+0

Здравствуйте, спасибо за внимание. Нет, два в этом случае одинаковы. Я просто проверяю, равен ли $ i равно 3, которые также можно разделить на 3. – Ignity

+0

thats fine, no problem :) – Ignity

+0

Вы пересылаете '$ i' в' 0', поэтому он никогда не становится больше, чем 'count ($ json)', поэтому ваш цикл 'for' становится бесконечным. – RoToRa

ответ

0

Вы переустановка $i к 0 поэтому он никогда не становится больше, чем count($json) и ваш for цикл становится бесконечным

+0

Спасибо, @RoToRa. – Ignity

Смежные вопросы