Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] sfImageTransformExtraPlugin nie zapisuje obrazków
Forum PHP.pl > Forum > PHP > Frameworki
evertras
Witam.

W swoim projekcie używam sfImageTransformExtra plugin. Problem polega na tym, że lokalnie wszystko działa natomiast na serwerze produkcyjnym juz nie. Moje ustawienia:

app.yml
Kod
sfImageTransformPlugin:
    mime_type:
      auto_detect:  true
      library:    gd_mime_type #  gd_mime_type (GD), Fileinfo (PECL), MIME_Type (PEAR)
    font_dir:     %SF_PLUGINS_DIR%/sfImageTransformExtraPlugin/data/example-resources/fonts


routing.yml
Kod
sf_image:
  class: sfImageTransformRoute
  url:   /uploads/avatars/thumbnails/:format/:filepath.:sf_format
  param: { module: sfImageTransformator, action: index }
  requirements:
    format:    '[\w_-]+'
    filepath:  '[\w/.]+'
    sf_format: 'gif|png|jpg'
    sf_method: [ get ]
  options:
    image_source: File
    image_location: %SF_ROOT_DIR%


Wywoływanie obrazka:
Kod
echo image_tag(url_for('sf_image', array(
                'format'    => 'square100',
                'filepath'  => 'avatars/default')), array('class' => 'imgBorder'));


Struktura projektu na serwerze:
Kod
--home
----user
------public_html
--------projekt_symfony
--------< tutaj wszystko to co znajduje się w projekcie: lib, apps itp. >
--------web
----------uploads
------------avatars (stad pobieram plik graficzny np: default.jpg)
--------------thumbnails (to jest folder w którym plugin ma cachować przekonwertowane grafiki)


Na stronie otrzymuje taki url do img'a:
Kod
src="/projekt/web/uploads/avatars/thumbnails/square100/avatars/default.jpg"


Ale problem polega na tym, że on tego obrazka nie widzi i nie cache'uje sobie transformacji. Gdy próbuję dostać się do obrazka poprzez url: http://strona/projekt/web/uploads/avatars/default.jpg to go widzi bez problemu. W settings.yml ustawiłem cache:true. Odpaliłem za pomocą cron'a: symfony cc, symfony project:publish-assets, symfony transforms:check-caching frontend. Z tego ostatniego otrzymałem pozytywną odpowiedź, że wszystko jest ustawione jak należy i ewentualny problem jest w uprawnieniach. Siedzę nad tym już 5 godzin i ni cholery nie wiem co jeszcze mogę mieć źle skoro na localu wszystko działa... Help !
jaro87
Cytat(evertras @ 5.04.2011, 21:46:20 ) *
Z tego ostatniego otrzymałem pozytywną odpowiedź, że wszystko jest ustawione jak należy i ewentualny problem jest w uprawnieniach.

Skoro problem jest w uprawnieniach, to może trzeba je zmienić?smile.gif Ustaw tymczasowo prawa do zapisu i odczytu dla wszystkich i zobacz czy coś się zmieniło.

A gdy użyjesz ścieżki bezwzględnej w url_for, obrazek się wyświetla?
  1. echo image_tag(url_for(..., ..., true));


evertras
Uprawnienia mam 777 na cały folder web/ i nic to nie pomogło. Tak samo ze ścieżką bezwględną. Może nie widzi w parametrze 'filepath' => '...' tego pliku. Już sam nie wiem...

EDIT: Dodałem do filepath ścieżkę bezwzględną przez którą znajduje obrazek w url'u, ale nic to nie pomogło.

Czy może być to spowodowane tym, że na serwerze mam php 5.2 a lokalnie 5.3 ?
destroyerr
Wersja php nie ma znaczenia. Czy lokalnie też masz taki układ, że domena nie wskazuje bezpośrednio na katalog web (tzn. czy lokalnie ustawiłeś VirtualHost)?
evertras
Lokalnie mam virtual host'a i domena wskazuje bezpośrednio do web/.

Edit: Utworzyłem nowy czysty projekt z samym pluginem i postawiłem virtual hosta symulującego ten na serwerze (domena/projekt/web/) i też mi nie wyświetla obrazków lokalnie. Problem musi polegać przy zapisie bo potem odwołuje się do zapisanego obrazka z folderu thumbnails ale jego tam nie ma.
jaro87
Stwórz sobie taką klasę
  1. class sfImageSourceMyFile extends sfImageSourceFile
  2. {
  3. public static function buildURIfromParameters(array $parameters)
  4. {
  5. // all params must be given
  6. if (!array_key_exists('filepath', $parameters))
  7. {
  8. throw new InvalidArgumentException('The sf_image for image_source "File" route has some missing mandatory parameters (filepath).');
  9. }
  10. return sprintf('%s', $parameters['filepath']);
  11. }
  12. }


i w routingu
options:
image_source: File

zmień File na MyFile.

U mnie dopiero z tym zadziałało.
janek9
Pozwolę sobie odświeżyć temat.

Mam podobny problem, wszystko działa w dev, natomiast w prod już pokazuje się error 500, ze nie moze znalezc obrazka.
toffiak
Najczęściej w takim przypadku pomaga czyszczeniu cache, ale jeśli nie pomogło warto sprawdzić co zanotowane jest w logach apacha.
janek9
Cytat(toffiak @ 18.07.2011, 19:23:49 ) *
Najczęściej w takim przypadku pomaga czyszczeniu cache, ale jeśli nie pomogło warto sprawdzić co zanotowane jest w logach apacha.


clear cache jest co chwile robiony, natomiast logi apache pokazuja: sfImageTransformator is not enabled - ale on jest włączony w settings, i w tasku od tego pluginu nie wykrywa żadnych błedow. Szczerze mowiac nie mam pojecia co to moze byc za problem..
jaro87
Skoro Apache mówi, że nie aktywowałeś tego modułu, to znaczy, że tego nie zrobiłeśsmile.gif

Przczytaj
http://www.symfony-project.org/book/1_2/05...e_killed_my_app
http://www.symfony-project.org/book/1_2/05...uration_cascade

i jeszcze raz dokładnie przeanalizuj swój settings.yml
janek9
@jaro87: Dzięki za wskazówki, problem leżał po stronie odblokowania modułu w moim przypadku w obu aplikacjach ponieważ przekierowuję po .htaccess do odpowiedniej aplikacji smile.gif

Po prawie 10h spędzonych nad tą wtyczką, rozwiązałem problem:

1. W templatce, przy definiowaniu wartości klucza filepath, należy nie podawać żadnych dodatkowych ścieżek - tylko nazwę pliku bądź obiekt
2. Plik routing.yml wtyczki zostawiamy tak jak jest "fabrycznie"
3. W pliku app.yml wtyczki sfImageTransformPlugin, ustawiamy z false na true pozycję: mime_detect (mime_detection)
4. W konsoli dajemy: symfony project:permissions i cache:clear, a następnie: symfony transforms:check-caching backend --env=[prod]
5. Sprawdzamy ustawienia chmodów, ewentualnie zmiana grupy z root na users w przypadku linuxa
6. Jeżeli nadal nic to nie da, należy odinstalować wtyczkę za pomocą komendy: symfony plugin:uninstall symfony/sfImageTransformExtraPlugin i ponownie ją zainstalować, w konsoli: publish-assets i cache:clear

W razie problemów, śmiało pisać na PW lub w tym wątku.

Matt
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.