Мое приложение имеет поле '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
отображается старый эскиз?
Я часами пытался выяснить это, но не смог найти истинную причину.
Заранее спасибо.