为什么PHP循环会在250个循环之后导致禁用页面?

为什么PHP循环会在250个循环之后导致禁用页面?,php,mysql,arrays,loops,Php,Mysql,Arrays,Loops,已解决:该问题与最大输入变量有关。我使用的服务器有一个名为“Suhosin”的安全框架。有两个值的作用非常类似于设置为1000的max_input_vars。这些值是“suhosin.post.max_vars”和“suhosin.request.max_vars”。我已经将这些设置为5000,现在一切都很好 --------------- 我现在有一个页面,它使用PHP来显示一组图像,这些图像下面有打印顺序选项,“while”循环直到每个图像都显示出来。它工作正常,每个图像都显示出来。用户需

已解决:该问题与最大输入变量有关。我使用的服务器有一个名为“Suhosin”的安全框架。有两个值的作用非常类似于设置为1000的max_input_vars。这些值是“suhosin.post.max_vars”和“suhosin.request.max_vars”。我已经将这些设置为5000,现在一切都很好

---------------
我现在有一个页面,它使用PHP来显示一组图像,这些图像下面有打印顺序选项,“while”循环直到每个图像都显示出来。它工作正常,每个图像都显示出来。用户需要选择要打印的内容,然后单击“提交”。这将通过页面submit.php发送表单。php通过将数据存储在数组中,生成他们选择的内容的列表。然后将该数组内爆并以文本形式通过电子邮件发送到某个地址。为每个图像提交四个数组条目。数据使用$\u POST发送

现在,如果在第一页上选择的图像少于250个,则此功能将完美运行。如果选择250或更多,submit.php页面将变为禁止的错误页面,并且不会发送电子邮件

我认为这是因为服务器将其视为一个无限循环,或者可能与它处理如此多的数组条目有关。我真的需要把这个修好。有人知道解决办法吗

编辑-这里是submit.php上的循环。我知道这可能不是最好的代码,我还在学习

编辑2-我尝试将最大输入变量更改为5000,但没有成功。我把它添加到我的PHP.ini文件中,这行以前没有。我无法重新启动服务器,因为它是共享主机。还有其他想法吗

编辑3-好的,已经取得了一些很大的进展。我不再获得禁止页面,但是当循环高于250时,电子邮件不会发送。在<250时仍能成功发送

$imgcount = $_SESSION['imgcount'];
$usercode = $_SESSION['usercode'];

// echo $imgcount . "<br><br>";
$extramessage = $_POST["message"];

$currentcount = 1;


$completeorder = array();

    while ($currentcount <= $imgcount) {
        $x = $_POST["print_amount_" . $currentcount . ""];
        // echo "<b><u>Image " . $currentcount . "</u></b><br>";
        // echo $x[0] . ", " . $x[1] . ", " . $x[2] . ", " . $x[3] . ", " . "<br><br>";
        $y = (string) "Image " . $currentcount . " - " . $x[0] . ", " . $x[1] . ", " . $x[2] . ", " . $x[3] . "
        ";
        // echo $y;
        $completeorder[] = $y;
        // echo $completeorder . "<br><br>";


        $currentcount = $currentcount + 1;
    };

$completeorder = implode( "\n", $completeorder );
$imgcount=$\u会话['imgcount'];
$usercode=$\会话['usercode'];
//echo$imgcount。“

”; $extramessage=$_POST[“message”]; $currentcount=1; $completeorder=array();
虽然($currentcount您存储了很多变量,但可能达到了php.ini设置的
内存限制

尝试使用以下调试输出:

echo "Memory: ".memory_get_usage(true) . " - PEAK: ".memory_get_peak_usage(true) . " MAX: ".ini_get("memory_limit");
但真正奇怪的是你得到了一个被禁止的页面。。。 即使达到php或ini_设置的某些限制,您通常也会收到浏览器可见输出的
错误500内部服务器错误
(仅当
显示_错误
启用时)


因此,也可能是您的Web服务器存在某种限制,这是通过禁用页面解决的。

解决了:该问题有点与max_input_vars有关。我使用的服务器有一个名为“Suhosin”的安全框架。有两个值的功能与max_input_vars非常相似,它们被设置为1000。这些值是“suhosin.post.max_vars”和“suhosin.request.max_vars”。我现在已经将它们设置为5000,现在一切都很好

max_input_vars、suhosin.post.max_vars和suhosin.request.max_vars都默认为1000。要检查它们的设置,请执行以下操作:

phpinfo()


然后按CTRL+F并查找这些设置以查看它们的设置。您可能没有任何“suhosin”设置。如果只是更改max\u input\u vars不起作用,请按CTRL+F键选择“1000”,然后查看值为1000的内容是否与“post”或“vars”相关或任何限制最大变量的内容。

可能重复“有一个名为max_input_vars的PHP设置,默认值为1000。”你能分享你的代码吗?你能发布你的php循环的代码吗?我尝试将max_input_vars行添加到我的php.ini中,因为它不在那里,并将它设置为5000,但它不起作用。我现在将代码添加到我的原始帖子中。@jacinattersall编辑配置文件后,你可能需要重新启动服务器。这太巧合了,249*4+一些其他字段1000。已经尝试增加内存限制,但没有解决问题。我正在与我的托管公司进行实时支持聊天,该人说他已经确定了问题的原因,但需要看看是否可以解决。必须是服务器设置,而不是代码问题。