500内部服务器错误 - IOException:无法使用LiipImagineBundle创建media / cache / my_thumb

时间:2014-03-21 11:54:53

标签: symfony imagefilter liipimaginebundle

我正在尝试对基于LiipImagineBundle的图像应用滤镜。

以下是步骤:

  1. 通过添加以下行在composer文件中安装:

    "liip/imagine-bundle": "1.0.*@dev"

  2. 通过添加以下行来配置config.yml文件:

    liip_imagine:
        resolvers:
        default:
            web_path:  
                web_root: %kernel.root_dir%/../web
                cache_prefix: media/cache
    
    filter_sets:
        cache: ~
        my_thumb:
            quality: 75
            filters:
              thumbnail: { size: [120, 90], mode: outbound }
    
  3. AppKernel.php中的包声明:

    new Liip\ImagineBundle\LiipImagineBundle(),
    
  4. 通过添加树枝文件来测试捆绑包:

    <img src="{{ asset('img/test.jpg') | imagine_filter('my_thumb') }}" />
    
  5. 但是,没有显示图像。生成的HTML文件包含:

    <img src="http://localhost/tuto/web/app_dev.php/media/cache/my_thumb/img/test.jpg">
    

    在浏览器的javascript控制台中,我发现了这个错误:

    GET http://localhost/tuto/web/app_dev.php/media/cache/my_thumb/img/test.jpg 500 (Internal Server Error)

    当我尝试打开链接(500内部服务器错误)时,symfony会抛出此错误:

    Failed to create /home/amine/NetBeansProjects/tuto/app/../web/media/cache/my_thumb/img 500 Internal Server Error - IOException

    我想我没有权限创建以下文件夹:/home/amine/NetBeansProjects/tuto/app/../web/media/cache/my_thumb/img。在我看来,自从我在Ubuntu工作以来,这是可以预料的。

    为避免此问题,我直接通过web更改了文件夹sudo chmod 777 -R web的权限,但问题仍然存在。

    有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题几乎解决了。我更改了config.yml:

    liip_imagine:
        resolvers:
        default:
            web_path:  
                web_root: %kernel.root_dir%/../web/imagine
                # imagine is the folder where filtered images will be created!
                cache_prefix: tuto/web/imagine/media/cache
                # where tuto is the folder of my symfony application

    filter_sets:
        cache: ~
        my_thumb:
            quality: 75
            filters:
              thumbnail: { size: [120, 90], mode: outbound }

对于树枝部分,它已改为:

<img src="{{ 'img/test.jpg' | imagine_filter('my_thumb') }}" />
{# where img is the folder where I put all my images!#}

我的问题是:是否可以通过其他方式更改cache_prefix的方式来更改参数tuto的配置,以便配置可以在任何地方使用? 我问这个问题,因为我会在托管网站时避免出现问题!

...谢谢

答案 1 :(得分:0)

我认为它有效,但事实并非如此!它是从旧缓存加载图像。 忘记我的上一篇文章!

我认为捆绑中存在错误。我解释一下:

这是我的新配置包:

    liip_imagine:
        resolvers:
        default:
            web_path:  
                web_root: %kernel.root_dir%/../web/img
                # %kernel.root_dir%/../web/img is the folder where filtered images will be created!
                cache_prefix: media/cache
                # media/cache the prefix of folder where the cached images will be created

    filter_sets:
        cache: ~
        my_thumb:
            quality: 75
            filters:
              thumbnail: { size: [120, 90], mode: outbound }

这是显示图像的树枝部分:

{# This way the filtered image will not be created!#}
<img src="{{ 'img/test.jpg' | imagine_filter('my_thumb') }}" />

{# That way, the filted images will be created. asset() must be used. #}
<img src="{{ asset('img/test.jpg' | imagine_filter('my_thumb')) }}" />

生成的图片链接不正确!实际上,获得的链接是:

http://localhost/media/cache/my_thumb/img/test.jpg

预期的正确链接是:

http://localhost/**tuto/web/img**/media/cache/my_thumb/img/test.jpg

tuto / web / img 中缺少部分。这是一个错误吗?

为了避免这个问题,我这样做了:

<img src="{{ asset('img/test.jpg' | imagine_filter('my_thumb'))|replace({'media':'tuto/web/img/media'}) }}" />

我猜:玩树枝不是一个好方法。我希望我们能找到解决这个错误的方法!

谢谢!