2010-07-31 15 views
0

Je reçois cette erreur, et je ne sais pas pourquoi.Temps d'exécution maximal dépassé (PHP)

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

Le code que j'ai pour le script PHP est:

<?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"; 
?> 

Et la ligne le message d'erreur fait référence est:

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

Alors, je suppose qu'il est en train de prendre trop long pour que cette ligne de code fasse son travail. Quelqu'un peut-il m'aider à résoudre ce problème?

Merci

+0

Nope. cette ligne fonctionne très vite. –

+0

Cela prend 30+ secondes pour moi. Que suggérez-vous est le problème? –

+0

Est-ce que $ j = 0 ou o? (zéro ou 'oh')? – Hans

Répondre

5

Vous avez une boucle infinie. $j commence à o (qui est converti en 'o', puisqu'il n'y a pas o constant), au lieu de 0 et:

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

résultats dans $ j = 'p' (même si 'o' + 1 est 1 .. Il continue avec $ j passant de 'z' à 'aa'. Toute chaîne non numérique est < n'importe quel nombre, donc la boucle interne est infinie.

Je ne suis pas vraiment sûr de ce que le point du script est. Mais on dirait que vous essayez de faire du cryptage ou du hachage local, ce qui est souvent une erreur. Regardez mcrypt et hash à la place.

EDIT: Ma réponse initiale était erronée sur la cause de la boucle infinie.

+0

+1 Vous avez raison, c'était "juste" une boucle intérieure infinie. Je ferais aussi humblement valoir que le PO ferait mieux d'utiliser une solution préconçue pour tout ce qu'il tente. – deceze

+0

Il * indique * que c'était un script d'un site Web. Que ce soit une bonne idée ou non est discutable. –

-1

Il n'y a pas grand chose à se demander ici. Votre code prend trop de temps à courir. Vous pouvez augmenter la limite de délai d'attente dans vos fichiers de configuration PHP. Je recommanderais cependant que vous utilisiez l'interpréteur PHP en ligne de commande pour voir où votre programme prend toutes ces 30 secondes et ensuite comprendre comment l'optimiser.

+0

J'utilise Winhost pour héberger mon php, cependant ils n'ont pas d'options/config/ou quoi que ce soit pour me permettre de faire du php. Donc, fondamentalement, ce que je reçois est ce que je reçois sans modification! –

+0

Et oui, je suis conscient de l'ironie :) –

+0

juste mettre l'heure dans votre script, tout en haut: set_time_limit (60); // ou 0 pour "off" (non recommandé) – Hans

-1

Utilisez set_time_limit(0) si vous souhaitez continuer avec votre code qui ignorera tout paramètre de délai d'attente dans php.ini.

+0

Mieux vaut savoir pourquoi quelque chose dépasse sa limite de temps. –

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"; 
?> 

S'il vous plaît voir si cela est l'erreur fixe ou me commentaire

+0

Vous devez spécifier ce que vous avez changé ainsi que pourquoi. –

1

Check this out il fonctionnera sûrement