Php ölümcül hata (exec zaman 60s aşıldı)

4 Cevap php

i wrote a code to update the password encryption in my site.. the code is..

<?php
$db= mysql_pconnect("localhost","root","root");
mysql_select_db("nitconnect");
$query="select password from register limit 1000";
$result=mysql_query($query);
$c=0;
while($ans=mysql_fetch_array($result))
{
    $newpass=sha1($ans[0].'Q*iV%qKz$&!C');
    $newone="update register set password='{$newpass}' where password='{$ans[0]}'";
    mysql_query($newone);
}
?>

Nasıl bu hata düzeltirim?

4 Cevap

php.ini yüksek php max_execution_time ayarı ama dışında hiçbir gerçek çözüm yoktur:

mysql doğal sha1 destekler, böylece belki gibi bir şey yapabilirsiniz

update register set password = sha1(concat(password, 'Q*iV%qKz$&!C'))

Bu php çözüm çok daha hızlı olmalıdır.

Eğer eski bir kutuyu sürece hala sorgu performansı çok düşük görünüyor. belki şifre alanı için tanımlanmış hiçbir indeksine sahip?

(Roman önerilen) MySQL'in yerel SHA1 yöntemini varsayarak döngü içine bu eklemeyi deneyin, işe yaramazsa:

set_time_limit(10);

Bu temelde bu işlevi tamamlamak için o 10 saniye daha vererek, denir her PHP zaman aşımı sıfırlar.

1000 kayıtları seçerek ve daha sonra foreach döngü içinde her değeri kullanarak ve yine db güncelliyoruz, bu ne zaman dışarı yapar, komut üstüne koyarak bu zaman sınırını artırmayı deneyin muhtemelen:

ini_set('max_execution_time', 14000); // or whatever value

Başka bir çözüm, parçalar halinde kayıtları yapılacak ardından son güncelleme kaydın endeksi geçen, aynı script kendinizi geri göndermek için bir başlık kullanın ve ardından sonraki öbek yapmak olacaktır.

Gibi bir şey:

if(issset($_GET['start']) {
   $start = $_GET['start'];
} else {
   $start = 0;
}

$query="select password from register limit $start, 50";
... do your stuff ...

$start = $start + 50;
header("Location: http://www.example.com/yourscript.php?start=$start");