我想要一個HTML表單來向用戶發送文件到我的服務器。我需要知道他開始發送這個文件的確切時間 - 而不是文件被接收的時間(我可以通過檢查服務器上的文件修改時間來檢查接收到的時間)。這段代碼應該這樣做 - 當點擊「提交」時,當前服務器時間應該寫入logsForSendingForm.txt,並且文件接收時間應該寫入logsForReceivedForm.txt。 不幸的是,發送文件時,只有接收到文件的時間被寫入到logsForReceivedForm.txt中 - 沒有任何內容寫入到logsForReceivedForm.txt中。 有趣的是,如果我不選擇任何文件並單擊提交,當前時間將寫入這兩個文件。檢查表單中提交文件的時間
如果你不知道如何調試這個,但你可以建議任何其他的解決方案(也許沒有AJAX),這也是可以的,我不需要像在這段代碼中那樣做。
<?php
if (isset($_POST['tickStart']))
{
file_put_contents('logsForSendingForm.txt', time() . "\n", FILE_APPEND);
}
elseif (!empty($_FILES))
{
file_put_contents('logsForReceivedForm.txt', time() . "\n", FILE_APPEND);
$f = $_FILES['file'];
$patch = str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']);
copy($f['tmp_name'], $patch.$f['name']);
}
?><!DOCTYPE html>
<html>
<head>
<script src='http://code.jquery.com/jquery-2.1.0.min.js'></script>
<script type='text/javascript'>
function sending()
{
$.ajax({
url: 'index.php',
type: 'POST',
data: { tickStart: true }
});
return true;
}
</script>
</head>
<body>
<form action='index.php' method='post' enctype='multipart/form-data'>
<input type='file' name='file'><br>
<input type='submit' name='submit' value='Submit' onsubmit="return sending()">
</form>
</body>
</html>
你就不能滑動VAR STARTIME =新的日期() ;在Ajax調用之前的某個地方,並將其傳遞給服務器? – TimSPQR
@TimSPQR,這會從用戶的計算機傳遞時間,而不是服務器的時間,對嗎?我需要這是服務器時間,所以沒有人可以「欺騙」。 – user1809811
因爲多個「同時」調用file_put_contents到同一個文件可能會破壞它,所以你將會遇到一個併發問題。 – denjello