【发布时间】:2011-02-10 00:23:37
【问题描述】:
我的应用有一个“Photo”字段来存储 URL。它使用sfWidgetFormInputFileEditable 作为小部件模式。要在上传新图像时删除旧图像,我在设置覆盖设置器中的值之前使用 unlink 并且它可以工作!!!
if (file_exists($this->_get('photo')))
unlink($this->_get('photo'));
- 照片存储在上传/照片中,当保存“
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');
}
- 为什么不能使用 unlink() 删除缩略图?操作顺序不正确吗?
是不是因为旧的缩略图显示在
sfWidgetFormInputFileEditable小部件中?
我花了几个小时试图弄清楚这一点,但无法确定真正的原因。 提前致谢。
【问题讨论】:
-
愚蠢的问题,但是您检查过文件系统权限吗?您确定运行您的 PHP 脚本的帐户有权实际删除文件吗?
标签: php file-upload symfony1 thumbnails