场景
我有一个文件上传器,可以在其中上传文件。还有另一个选项可以更新以前上传的文件。我也可以使用某些链接查看上传的文件。
要求
一切正常。可以说我上传了fileA。我可以使用链接查看此文件。然后,我用另一个名为fileB的文件更新了该文件。我可以使用相同的链接查看此文件。这里的问题是,如果我使用相同的文件名第二次上传,它将出现错误。因此,我通过以下方式修改了代码。
if(file_exists($target_fileCadEdit)){
unlink($target_fileCadEdit);
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
}else{
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
}
问题
已删除旧文件,并在相同位置正确更新了新文件(对于旧文件和新文件,请注意相同的文件名)。但是,当我使用相同的链接查看更新的文件时,它仍显示旧文件。我亲自检查了上载的文件,而旧文件已不存在,并用新文件进行了更新。但是当我使用链接单击视图时,它仍显示旧文件。不确定程序从何处访问该已删除的文件。
有人可以帮忙吗?
修改
发现的问题是由于浏览器缓存。我尝试手动删除浏览器缓存,然后再次尝试查看文件,现在它显示了服务器中存在的实际文件。
立即出现问题
现在的问题是,如何在运行脚本时自动清除缓存。一些建议是尝试使用标头标签。但是,如果配置不正确,恐怕会影响性能。因此,我使用了另一种方法clearstatcache();
。但它似乎也不起作用。请立即查看我的代码
if(file_exists($target_fileCadEdit)){
unlink($target_fileCadEdit);
clearstatcache();
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
clearstatcache();
}else{
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
}
这是我查看文件的链接。它使用了许多动态变量
<td class="viewEditTd">
<a href="<?php echo $locationForViewLink; ?><?php echo $slash; ?><?php echo $_POST['searchInput']; ?><?php echo $cadguiFolder; ?><?php echo $row['cadRevision']; ?><?php echo $slash; ?><?php echo $row['cadFile']; ?>" target="_blank" class="whiteLink"><span class="
glyphicon glyphicon-folder-open" aria-hidden="true"></span> View </a>
</td>
有任何线索吗?
答案 0 :(得分:1)
基于Stack over流成员的建议,我可以通过使文件打开链接的URL动态化来解决此问题,从而使链接始终指向不同的文件名。 这是我最后的工作代码
文件取消链接和上传阻止
if(file_exists($target_fileCadEdit)){
unlink($target_fileCadEdit);
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
}else{
move_uploaded_file($_FILES["fileCad"]["tmp_name"], $target_fileCadEdit);
}
文件查看阻止
<td class="viewEditTd">
<a href="<?php echo $locationForViewLink; ?><?php echo $slash; ?><?php echo $_POST['searchInput']; ?><?php echo $cadguiFolder; ?><?php echo $row['cadRevision']; ?><?php echo $slash; ?><?php echo $row['cadFile'].'?'; ?><?php echo generateRandomString(); ?>" target="_blank" class="whiteLink"><span class="glyphicon glyphicon-folder-open" aria-hidden="true"></span> View </a>
</td>
请注意文件名之后的部分,我给了?
,然后给了echo
函数generateRandomString()
生成随机字符串的功能
感谢This Post使用代码生成随机数
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}