3

解決済み:この問題は、max_input_vars に関連していました。私が使用しているサーバーには、「Suhosin」というセキュリティ フレームワークがあります。1,000 に設定された max_input_vars と非常によく似た機能の 2 つの値がありました。値は「suhosin.post.max_vars」と「suhosin.request.max_vars」でした。私はそれらを 5,000 に設定しており、すべてがうまく機能しています!

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


私は現在、PHP を使用して一連の画像を表示し、その下に印刷順序オプションを表示するページを持っています。すべての画像が表示されるまで「while」ループを実行します。正常に動作し、すべての画像が表示されます。ユーザーは、印刷したいものを選択してから、[送信] をクリックする必要があります。これにより、submit.php ページを介してフォームが送信されます。Submit.php は、データを配列に格納することで、選択したもののリストを生成します。次に、その配列が内破され、アドレスにテキストとして電子メールで送信されます。画像ごとに 4 つの配列エントリが送信されます。データは $_POST を使用して送信されます

これで、最初のページで選択された画像が 250 未満の場合、これは完全に機能します。250 件以上選択すると、submit.php ページが Forbidden エラー ページになり、メールが送信されません。

サーバーがそれを無限ループとして扱っているか、非常に多くの配列エントリを処理していることに関係しているためだと思いました。私は本当にこれを修正する必要があります。誰かが解決策を知っていますか?

編集 - これがsubmit.phpのループです。おそらく最良のコードではないことはわかっていますが、まだ学習中です。

EDIT 2 - max_input_vars を 5000 に変更しようとしましたが、うまくいきませんでした。PHP.ini ファイルに追加しましたが、以前は行がありませんでした。共有ホスティングであるため、サーバーを再起動できません。他のアイデアはありますか?

EDIT 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