O (serverside) yüklemesi için bir dosya aldı zamanını bilmek mümkün mü? Ben bir resim yükleme API var ve benim yanıt ben yükleme zamanı (betik çalıştırma zamanı dahil değil) dönmek istiyorum.
Linke bak.
http://prefetch.net/blog/index.php/2007/01/02/measuring-apache-request-processing-time/
Bu istek apache tarafından receieved edilir zaman zaman oturum apache nasıl yapılandırılacağı gösterilmektedir.
Sonra PHP apache_request_headers fundtion kullanmak ve o zaman dışarı çıkarabilir.
http://php.net/manual/en/function.apache-request-headers.php
Belki bu şekilde, apache dosyayı recieving başladığında arasındaki zamanı anlamaya ve geçerken işleme php?
Ben denemedim gibi, bazı testler yapmak gerekebilir. Eğer çalışırsa bana bildirin ... :)
UPDATE BY @GustavBertram: strong>
Not: Her cevap için ayrı ayrı girişimini belgelemek istiyorum çünkü ben, onun yerine kendi sorunun cevabını düzenlenebilir.
Ben Apache mod_headers etkin ve aşağıdaki config dosyasını ekledi:
#/etc/apache2/mods-available/headers.conf
RequestHeader set X-Request-Received: %t
Sonra benim komut güncelleme:
<form action="#" enctype="multipart/form-data" method="post">
Upload:<input type="file" name="datafile" size="40">
<input type="submit" value="Send">
</form>
<?php
// Get the request headers
$REQUEST_HEADERS = apache_request_headers();
// Extract $t value from header
parse_str($REQUEST_HEADERS['X-Request-Received']);
// Massage string to get float in seconds
$received_time = substr_replace($t, '.', 10, 0);
// Get the current microtime as float in seconds
$current_time = microtime(1);
$upload_time = $current_time - $received_time;
echo $received_time . " \n <BR />";
echo $current_time . " \n <BR />";
echo $upload_time;
Benim yerel makine üzerinde hem test ve 700MB dosya ile ağdaki uzak bir makine üzerinde.
Aklımda basit bir mantık var
resim upload için yayınlanmıştır zaman
bir değişkene başlangıç zamandan tasarruf ve örneğin başka bir değişkeni ayarlayın = 0 uploadStatus, sonra yükleme uploadStatus = 1 değişkeni ayarlamak yapılır ve ayrıca başka bir değişkende bitiş zamandan tasarruf olduğunda.
UploadStatus == 1 ise yükleme çek, sonra bitiş zaman başlangıç saati çıkarma ve yükleme zaman alacak.
Bu yöntem aslında oldukça Tamam çalışır gibi görünüyor:
<?php session_start(); // must be at the top ?>
<form id="upload-form" enctype="multipart/form-data" method="post">
<input type="file" name="datafile" size="40">
<input type="submit" value="Send">
</form>
<script type="text/javascript">
$(function()
{
$('#upload-form').submit(function()
{
$.ajax({
url: 'start-timer.php',
type: 'POST',
context: this,
success: function() { this.submit(); },
});
return false;
});
});
</script>
<?php session_start();
$_SESSION['time'] = microtime(true);
<?php
session_start();
header('content-type: text/plain; charset=utf-8');
if( ! isset($_FILES['file'])
|| ! isset($_SESSION['time'])
|| $_FILES['file']['error'] !== UPLOAD_ERR_OK
|| ! is_uploaded_file($_FILES['file']['tmp_name']))
{
exit('stuff went wrong...');
}
$time = microtime(true) - $_SESSION['time'];
unset($_SESSION['time']);
echo round($time, 3).'s';
Çalışma örnek: http://samples.geekality.net/upload-timer