3

已解决:问题与 max_input_vars 有关。我使用的服务器有一个名为“Suhosin”的安全框架。有两个值的功能与设置为 1,000 的 max_input_vars 非常相似。值是“suhosin.post.max_vars”和“suhosin.request.max_vars”。我将这些设置为 5,000,现在一切正常!

---------------


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

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

我认为这是因为服务器将其视为无限循环,或者可能与它处理如此多的数组条目有关。我真的需要这个修复。有谁知道任何解决方案?

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

编辑 2 - 我尝试将 max_input_vars 更改为 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 );
4

2 回答 2

0

你存储了很多变量,也许你达到了memory_limit你的 php.ini 设置。

试试这样的一些调试输出:

echo "Memory: ".memory_get_usage(true) . " - PEAK: ".memory_get_peak_usage(true) . " MAX: ".ini_get("memory_limit");

但真正奇怪的是你得到了一个禁止页面......即使达到了 php 或 ini_settings 的某些限制,你通常也会Error 500 Internal Server Error在浏览器中看到一个可见的输出(只有在display_errors启用的情况下)。

因此,也可能是,您的网络服务器对禁止页面的回答有某种限制。

于 2013-10-10T10:21:52.080 回答
0

已解决:问题与 max_input_vars 有关。我使用的服务器有一个名为“Suhosin”的安全框架。有两个值的功能与设置为 1,000 的 max_input_vars 非常相似。值是“suhosin.post.max_vars”和“suhosin.request.max_vars”。我现在将这些设置为 5,000,现在一切正常!

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

phpinfo();

然后 CTRL + F 并查找这些设置以查看它们的设置。您可能没有任何“suhosin”设置。如果简单地更改 max_input_vars 并不能解决问题,则 CTRL + F 为“1000”并查看任何值为 1000 的内容是否与“post”或“vars”或任何会限制您的最大变量的内容相关。

于 2013-10-10T13:28:51.697 回答