Avatar billede computopic Nybegynder
13. februar 2003 - 15:27 Der er 6 kommentarer og
1 løsning

Upload af en tekstfil til mysql. Virker fint, men får en timeout!

Jeg har lavet et script der gør det muligt at uploade en  komma sepereret tekstfil, hvorefter min phpkode smider dataen i en given tabel i MySQL. Det virker fint nok. Nu er problemmet bare at tekstfilerne er for store, så jeg får en timeout fra serveren inden at phpen har nået at indsætte alle recordsne i tabellen. Nogle der har en ide til hvordan det kan ændres?

Ting der ikke må ændres:
Timeout tiden på serveren.
filstørelsen på tekstfilen.

Min kode:
<?
if ($data){
}else{
echo"
<form enctype='multipart/form-data' method='post'  action='$PHP_SELF?pageid=indlaes-iout'>
<input class='add-form02' type='File' name='data' size='25'>
<input class='form01-button' type='submit' name='submit' value='Upload'>
</form>
<br>
<br>
Vær opmærksom på at tidligere data i systemet bliver slettet.<br><br>
";}

$sqlstr_udd = "DELETE FROM ansoegere_tilstande";
$que_udd = mysql_query($sqlstr_udd, $connectvar);

if ($data){
$fp = fopen("$data", "r");
while (!feof($fp))
{
        $next = fread($fp, 1024);
        $buffer .= $next;
}

$lines = explode ("\n", $buffer);

//print_r($lines);
foreach ($lines as $line){
$line = str_replace('"', "", "$line");
list ($status, $journalnummer, $kode) = split (',', $line);

//echo "$status - $journalnummer - $kode<br>";
$sqlstr_udd = "INSERT INTO ansoegere_tilstande (status, journalnummer, kode) VALUES('$status','$journalnummer','$kode') ";
$que_udd = mysql_query($sqlstr_udd, $connectvar);
$count++;
}
echo "<br>Der er impoteret $count records.
";
//<meta http-equiv=\"refresh\" content=\"500; url=?pageid=\">

}

?>

Ps. koden kan muligvis ikke køre som den er, da den er afhening af rasten af sitet..
Avatar billede _darkstar_ Nybegynder
13. februar 2003 - 20:04 #1
Du kan sætte timeout-tiden globalt for PHP, så den ikke timer ud så hurtigt. Det gør man i php.ini på serveren.

En anden løsning som kan bruges et lille stykke er at pakke filen med gzip før at du sender den. Det giver dig mulighed for at sende lidt flere data.

Løsningen holder dog ikke i al evighed, da scriptet alligevel timer ud før eller siden. Se http://www.php.net/manual/en/ref.zip.php
Avatar billede olebole Juniormester
13. februar 2003 - 20:40 #2
<ole>

<?
set_time_limit( 360 );

# Resten af din PHP-kode
?>

Giver dig 3 minutter - det kan du jo selv justere  :)

/mvh
</bole>
Avatar billede _darkstar_ Nybegynder
13. februar 2003 - 20:52 #3
ole>> Jeg skal vist opdatere min PHP-viden :-)
Avatar billede olebole Juniormester
13. februar 2003 - 21:05 #4
Det er en darjly, lille funktion  ;o)
  http://www.php.net/manual/en/function.set-time-limit.php
/mvh
Avatar billede _darkstar_ Nybegynder
13. februar 2003 - 21:10 #5
Takker.
Avatar billede olebole Juniormester
13. februar 2003 - 21:13 #6
... anytime  ;o)
Avatar billede computopic Nybegynder
05. marts 2003 - 11:50 #7
okay.. cool kode.. *S*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester