Aşağıdaki kod Ani veritabanı ayrılma

3 Cevap php

Ben kullanıcı aşağıdaki kodu kullanarak belirli bir dosyayı karşıdan hangi zaman kayıt ediyorum. Ancak, bu kod, ilk yükleme zamanı geliyor ama daha sonra istemci ve sunucu arasındaki veri tabanı bağlantısını kesmeden oluyor. Ben (gösterildiği gibi) 'exit' kaldırırsanız, her şey iyi geliyor fakat indirilen dosya bozuk veya hasar görmüş olabilir.

Herkes bu kodu kontrol ve onunla yanlış ne açıklayabilir misiniz? Ben sorunun çıkış ile olduğunu düşünüyorum, ama ben çıkmak yerine ne kullanabilirim?

<?php

$f_name = $_POST["fn"];

$file = "../mt/sites/default/files/ourfiles/$f_name";

if (file_exists($file)) {
   header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
   header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
  //ob_clean();
  // flush();
    readfile($file);
  //  exit;
}
$con = mysql_connect("localhost","mt","mt");
if (!$con) {
  die('Could not connect: ' . mysql_error());
} else {
  echo "Connected";
}

// Create table
mysql_select_db("mt", $con);

mysql_query("INSERT INTO down_time (FileName,DateTime)
VALUES ('".$f_name."',NOW())");
mysql_close($con);

?>

3 Cevap

Bu büyük dosyaları ve / veya yavaş bağlantılarda olursa, max_execution_time ini_set fonksiyonunu kullanarak php.ini veya script çimdik çalışın.

Eğer çıkış eklerseniz iyi, kod sadece db içine dosya eklemek gerekir noktaya gelmez.

Eğer çıkış dahil etmezseniz, bunu dosya bozuk olan dosya içeriğini göndermek ve ona "Connected" append.

belki ob_start denemek ve db şeyler etrafında ob_end_clean yapabilirsiniz: http://php.net/manual/en/function.ob-start.php

Bu çıkışa gönderilen engelleyen şey, bu yüzden çıkış kullanmak zorunda değilsiniz ama o bozuk almaz böylece hiçbir şey sizin dosyası sonra çıkışa gönderildi alır

gibi bir şey:

    readfile($file);
}
ob_start();
$con = mysql_connect("localhost","mt","mt");
//all the DB stuff
mysql_close($con);
ob_end_clean();
?>

Eğer ob_end_clean sonra exit () sadece emin olmak için ama bu sadece iyi çalışması gerekir içerebilir.

Deneyin:

<?php
$f_name = $_POST["fn"];
$file = "../mt/sites/default/files/ourfiles/$f_name";

if (!file_exists($file)) { die('File not found'); }

if (!$con = mysql_connect("localhost","mt","mt")) { die(mysql_error()); }
if (!mysql_select_db("mt")) { die(mysql_error()); }
$q = "INSERT INTO `down_time` (`FileName`, `DateTime`) VALUES ('"
   . mysql_real_escape_string($f_name) . "',NOW())";
if (!mysql_query($q)) { die(mysql_error()); }

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
readfile($file);