Как unlink () находит файл для удаления? - PullRequest
2 голосов
/ 20 апреля 2010

Мое приложение имеет поле '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 отображается старый эскиз?

Я часами пытался выяснить это, но не смог найти истинную причину. Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

$ path = "загрузки / фотографии"; $ image = "Имя изображения";

unlink($path.$image);
1 голос
/ 21 апреля 2010

Решено и Удивлено

ОК, вот код, который работал после добавления некоторых эхо-сигналов ...

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')) никогда не работал. Infact, блок if (fileExists) никогда не был введен, и все же файл был удален. Я думаю, sfWidgetFormInputFileEditable автоматически удалял полное изображение при загрузке нового.

Спасибо, Мартин и Канак

0 голосов
/ 20 апреля 2010

Вы уверены в этой строке?

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

Я думаю, вы должны использовать $this->_get('photo'); вместо $this->get('photo');

Может быть, попытаться сбросить $thumbpath переменную.

var_dump($thumbpath); exit;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...