为什么取消链接和move_uploaded_file不起作用

阿努

情境

我有一个文件上传器,可以在其中上传文件。还有另一个选项可以更新以前上传的文件。我也可以使用某些链接查看上传的文件。

需求

一切都很好。可以说我上传了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>

有任何线索吗?

阿努

根据Stack over Flow成员的建议,我可以通过使文件打开链接的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()

生成随机字符串的函数

感谢这篇文章的代码来生成随机数

function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章