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

时间:2018-07-04 09:16:06

标签: php

场景

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

要求

一切正常。可以说我上传了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>

有任何线索吗?

1 个答案:

答案 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;
}