0

このエラーが発生しましたが、理由がわかりません。

Fatal error: Maximum execution time of 30 seconds exceeded in E:\web\autoopti\thanks.php on line 65

PHPスクリプトのコードは次のとおりです。

<?php
    $key = 129;

    $email = $_REQUEST["payer_email"];
    $first = $_REQUEST["first_name"];
    $last = $_REQUEST["last_name"];
    $acode = $_REQUEST["hash"];

    $txt = $email . "|" . $email . "|" . $first . "|" . $last . "|" . $acode;
    $outtxt = '';

    for($i=0;$i<strlen($txt);)
    {
        for($j=o;$j<strlen($key);$j++,$i++)
        {
            $outtxt .= $txt{$i} ^ $key{$j};
        }
    }

    echo "thanks";
?>

エラーメッセージが参照する行は次のとおりです。

$outtxt .= $txt{$i} ^ $key{$j};

したがって、このコード行が機能するのに時間がかかりすぎているだけだと思います。誰かがこれを修正するのを手伝ってくれますか?

ありがとうございました

4

5 に答える 5

5

無限ループがあります。 0 ではなく$jo (定数がないため、'o' に変換されます) から始まります。o

$j = 'o';
$j++;

$j = 'p' という結果になります'o' + 1(1 ですが...)

それは $j に続き、最終的に 'z' から 'aa' になります。数値以外の文字列は<任意の数値であるため、内側のループは無限です。

スクリプトのポイントが何であるかはよくわかりません。しかし、自家製の暗号化またはハッシュ化を行おうとしているように見えますが、これはしばしば間違いです。代わりにmcrypthashを見てください。

EDIT:無限ループの原因についての私の最初の答えは間違っていました。

于 2010-07-31T04:46:38.060 に答える
1

これをチェックしてくださいそれは確かに動作します

于 2010-07-31T06:56:14.153 に答える
0
<?php
$key = 129;

$email = $_REQUEST["payer_email"];
$first = $_REQUEST["first_name"];
$last = $_REQUEST["last_name"];
$acode = $_REQUEST["hash"];

$txt = $email . "|" . $email . "|" . $first . "|" . $last . "|" . $acode;
$outtxt = '';

for($i=0;$i<strlen($txt);)
{
    for($j=0;$j<strlen($key);$j++,$i++)
    {
        $outtxt .=  ( $txt{ $i } ^ $key{$j} ) ;
    }
}

echo "thanks";
?>

これが修正されたエラーかどうかを確認するか、私にコメントしてください

于 2010-07-31T06:08:45.687 に答える
-1

ここで不思議に思うことはあまりありません。コードの実行に時間がかかりすぎています。PHP 構成ファイルでタイムアウト制限を増やすことができます。ただし、コマンドライン PHP インタープリターを使用して、プログラムがこれら 30 秒すべてを費やしている場所を確認し、それを最適化する方法を見つけることをお勧めします。

于 2010-07-31T04:50:21.193 に答える
-1

set_time_limit(0)php.ini のタイムアウト設定を無視するコードを続行する場合に使用します。

于 2010-07-31T05:02:38.840 に答える