2010-02-13 4 views
0

내가 내 사이트에 비밀번호 암호화를 업데이트하는 코드를 작성 .. 코드입니다 ..치명적인 오류가

<?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); 
} 
?> 

내가이 오류를 해결하려면 어떻게합니까?

+0

얼마나 많은 쿼리 당신이하고있다? 테스트 출력을 만들어서 어떤 시점에서 타임 아웃이 발생했는지 판단 할 수 있습니까? 또한, mysql 에러 핸들링을 추가하여 스크립트가 데이터베이스에 연결을 관리하는지 여부를 확인할 수 있습니다. www.php.net/mysql_error –

+0

더 나은 가시성을 위해 코드를 포맷하고 (편집기에서 코드 옵션 사용) 도움이 될 수 있습니다. –

+0

"PHP에서 치명적인 오류가 발생했습니다. ** ** – badp

답변

1

PHP의 max_execution_time을 설정 높은 php.ini 파일에 있지만 이외의 진정한 해결책이 없다 :

MySQL은 기본적으로 어쩌면 당신은 그냥 할 수있는, SHA1을 지원하는이 많이 있어야한다

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

같은 PHP 솔루션보다 빠릅니다.

고대 상자를 사용하지 않는 한 여전히 쿼리 성능이 매우 낮아 보입니다. 어쩌면 암호 필드에 대해 정의 된 색인이없는 것입니까? 제공

set_time_limit(10); 

그것은 기본적으로 그 함수가 호출 될 때 매번 PHP 제한 시간을 재설정 : MySQL의의 기본 SHA1 방법 (로마가 제안), 작동 루프에이를 추가하지 않는 가정

+0

감사합니다. 그러나 max_execution_time은 약 500 초입니다. 편집했습니다 .. 여전히 오류가 표시됩니다 .. 어떤 아이디어가 abt 오류입니까? – kgdinesh

+0

웹 서버를 다시 시작 했습니까? :) – roman

+0

넵...................에서의 명령을 사용하여 직접 phpmyadmin 명령을 받았다. jus 0.013 초가 걸렸습니다. 이런 인스턴트 메신저 n00b .. :( – kgdinesh

1
<?php 

    $db= mysql_pconnect("localhost","root","root"); 
    mysql_select_db("nitconnect"); 
    $query="UPDATE register SET password = SHA1(CONCAT(password, 'Q*iV%qKz$&!C')) WHERE 1"; 
    $result=mysql_query($query); 

?> 
0

완료하는 데 10 초가 더 걸립니다.

0

1000 레코드를 선택한 다음 foreach 루프의 각 값을 사용하고 db를 다시 업데이트하면 시간이 많이 걸릴 수 있습니다. 스크립트 상단에 시간 제한을 늘려보십시오.

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

또 다른 해결 방법은 청크로 레코드를 작성한 다음 헤더를 사용하여 동일한 스크립트로 돌아가서 마지막으로 업데이트 된 레코드의 인덱스를 전달한 다음 다음 청크를 수행하는 것입니다. 같은

뭔가 :

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"); 
관련 문제