【问题标题】:How does unlink() find the file to delete?unlink() 如何找到要删除的文件?
【发布时间】:2011-02-10 00:23:37
【问题描述】:

我的应用有一个“Photo”字段来存储 URL。它使用sfWidgetFormInputFileEditable 作为小部件模式。要在上传新图像时删除旧图像,我在设置覆盖设置器中的值之前使用 unlink 并且它可以工作!!!

if (file_exists($this->_get('photo')))
    unlink($this->_get('photo'));
  1. 照片存储在上传/照片中,当保存“Photo”时,仅保存文件名xxx-yyy.zzz(而不是完整路径)。但是,我想知道symfony/php是如何知道要删除的文件的完整路径的?

第 2 部分: 我正在使用sfThumbnailPlugin 生成缩略图。所以实际的代码是这样的:

public function setPhoto($value)
    {   
        if(!empty($value))
            {
                Contact::generateThumbnail($value); // delete current Photo & create thumbnail
                $this->_set('photo',$value);    // setting new value after deleting old one
            }
    }   

    public function generateThumbnail($value)
    {
                $uploadDir = sfConfig::get('app_photo_upload'); // path to upload folder
                if (file_exists($this->_get('photo')))
                {
                  unlink($this->_get('photo')); // delete full-size image
                  // path to thumbnail
                  $thumbpath = $uploadDir.'/thumbnails/'.$this->get('photo'); 
                  // read a blog, tried setting dir manually, doesn't work :(
                  //chdir('/thumbnails/');
                  // tried closing the file too, doesn't work! :(
                  //fclose($thumbpath) or die("can't close file"); 
                  //unlink($this->_get('photo'));   // doesn't work; no error :( 
                  unlink($thumbpath);   // doesn't work, no error :(
                }

                 $thumbnail = new sfThumbnail(150, 150);
                 $thumbnail->loadFile($uploadDir.'/'.$value);
                 $thumbnail->save($uploadDir.'/thumbnails/'.$value, 'image/png');
    }
  1. 为什么不能使用 unlink() 删除缩略图?操作顺序不正确吗? 是不是因为旧的缩略图显示在 sfWidgetFormInputFileEditable 小部件中?

我花了几个小时试图弄清楚这一点,但无法确定真正的原因。 提前致谢。

【问题讨论】:

  • 愚蠢的问题,但是您检查过文件系统权限吗?您确定运行您的 PHP 脚本的帐户有权实际删除文件吗?

标签: php file-upload symfony1 thumbnails


【解决方案1】:

你确定这条线吗?

$thumbpath = $uploadDir.'/thumbnails/'.$this->get('photo');

我认为你应该使用$this->_get('photo'); 而不是$this->get('photo');

也许尝试转储$thumbpath 变量。

var_dump($thumbpath); exit;

【讨论】:

    【解决方案2】:

    $path = "上传/照片"; $image = "图片名称";

    unlink($path.$image);
    

    【讨论】:

      【解决方案3】:

      解决和惊讶

      好的,这是添加一些回声后工作的代码......

      public function generateThumbnail($value)
          {
                   $uploadDir = sfConfig::get('app_photo_upload'); // path to upload folder
                      // path to thumbnail
                   $thumbpath = $uploadDir.'/thumbnails/'.$this->get('photo'); 
                   if (file_exists($uploadDir.$this->_get('photo')))
                   {
                  >>    unlink($uploadDir.$this->_get('photo')); // delete full-size image
                  >>    unlink($thumbpath); // delete thumn
                   }
      
          //thumbnail generation code
          }
      

      据推测,unlink($this->_get('photo')) 从未工作过。事实上,从未输入过 if(fileExists) 块,但文件已被删除。 我认为sfWidgetFormInputFileEditable 在上传新图片时会自动删除完整图片。

      感谢马丁和卡纳克

      【讨论】:

        猜你喜欢
        • 2014-04-26
        • 1970-01-01
        • 2016-07-25
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 2013-03-03
        相关资源
        最近更新 更多