如果来自同一用户

时间:2016-12-02 21:09:18

标签: php file-upload upload save

我有一个名为resale_certificates的目录,我将文件保存到该目录,但使用部分电子邮件和分配给它们的代码对名称进行加密。 注意:每次加密都是相同的,但每个用户都是唯一的!

当他们上传image.png时,它会将文件保存到他们的ENcrypt.png 如果他们上传另一个image.png,它将替换他们的Encrypt.png 但是,当他们上传image.jpg时,resale_certificates目录中会出现他们的ENcrypt.jpg和他们的加密.png。

处理此问题的最佳方法是什么?我正在寻求建议并愿意改变我如何保存它或我可以采取的措施来防止这种情况发生!

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您知道以前上传图片的名称,则可以在保存新图片之前执行以下操作:

<?php
$previousImageName = 'theirEncrypt.png';
unlink(APP_DIR . "/resale_certificates/" . $previousImageName);

答案 1 :(得分:1)

好吧,您可以使用图像库将上传的图像转换为您想要的任何格式,即如果他们上传.JPG,您可以使用Imagick或GD等图像库输出.PNG文件并上传。

但是,如果您不介意.JPG或.PNG(或.GIF),您可以使用PHP扫描目录以查找所有文件(尽管可能非常密集!)以查找文件给出的名字。

例如:

<?php

foreach( scandir('/path/to/resale_certificates/') as $file ){
    if( $file != '.' && $file != '..'){
        // explode so we remove the last extension path ( not type safe ! )
        $arguments = explode('.', $file);
        // store the last part
        $ext = end($arguments);
        // pop the extension from the $arguments array so we are left
        // with whatever was left
        array_pop($arguments);
        // concatenate the $arguments into a single string again
        $filename = implode('.', $arguments);

        // now we can check the filename again
        if( $filename == $theirEncrypt){
            unlink('/path/to/resale_certificates/' . $filename . '.' . $ext);
        }
    }  
}

编辑: $ file是scandir()返回的$ files数组中的字符串;功能。单点和双点是导航到当前(。)和父(...)目录的方法,因此是符号链接。另一种选择是检查$文件是否实际上是一个文件。您可以使用is_file('/ path / to / resale_certificates /'。$ file)替换比较行,以检查它是文件还是符号链接(如。和...),但它更加密集,然后检查字符串比较。在您的用例中,它不是必需的。

在相关的说明中,这是非常密集的,取决于您拥有的客户端和证书的数量,作为替代方案,您可以将文件名存储到存储(即数据库或类似的东西),并且只需取消链接文件,这将节省您迭代每个文件,并直接取消链接文件。