1

我在删除实体时使用此代码删除图像

  /**
     * @ORM\PostRemove()
     */
    public function removeUpload()
    {
        if ($this->filenameForRemove)
        {
            unlink ( $this->filenameForRemove );
        }
    }

但问题是,如果我没有图像,那么它会抛出这样的异常

Warning: unlink(/home/site/../../../../uploads/50343885699c5.jpeg) [<a href='function.unlink'>function.unlink</a>]: No such file or directory i

如果文件不存在或目录不存在,是否有任何方法应该跳过此步骤并仍然删除实体

4

2 回答 2

3

您可以使用file_exists它来确保文件确实存在并is_writable确保您有权删除它。

if ($this->filenameForRemove)
{
    if (file_exists($this->filenameForRemove) &&
        is_writable($this->filenameForRemove))
    {
        unlink ( $this->filenameForRemove );
    }
}
于 2012-09-14T00:33:05.310 回答
0

更新

Symfony 引入了文件系统组件。您可以在此处查看文档。它说:The Filesystem component provides basic utilities for the filesystem.

例如,您可以在删除文件之前检查文件路径/目录是否存在,如下所示:

use Symfony\Component\Filesystem\Filesystem;


$filesystem = new Filesystem();
$oldFilePath = '/path/to/directory/activity.log'

if($filesystem->exists($oldFilePath)){
    $filesystem->remove($oldFilePath); //same as unlink($oldFilePath) in php
}
于 2020-11-29T15:06:52.547 回答