php – 使用Slim框架提供图像/集合

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 使用Slim框架提供图像/集合脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要将多个模块中常见的图像提供给公共文件夹外部的资文件夹.我正在使用Slim Framework.
app/-
    -Classes/
    -vendor/
    -Resources/-
               - Images/
    -Admin/-
           - Styles/
           - Scripts
           - index.PHP
           - inIT.PHP
    -Public/-
            - Styles/
            - Scripts
            - index.PHP
            - init.PHP

目前我已经创建了一个子域static.PRo1.local /来提供本地图像.但现在我正在寻找其他方式.

在苗条的时候,我正在尝试根据需要制作动态创建和提供图像的路线

$app->get('/assets/:height/:width/:id/:tyPE',function() use ($app) {
    header('Content-type: image/jpeg');
    $dir = dirname(__DIR__)."/Resources/Images/";
    $image = new Imagick($dir.$id.'.svg');
    /*
        Code to create images based on height,width,and change its format {svg to png} as required
    */
        $app->response->header('Content-Type','content-type: image/'.$type );
        echo $image;
    // $res->body($image);
});

我打算将它用作< img src =“/ assets / 200/400 / test / png”/>但我一直得到404错误.

我已经试过了

> http://help.slimframework.com/discussions/questions/93-how-get-image-for-a-specific-route
> http://help.slimframework.com/discussions/questions/674-best-practice-to-return-images
> http://help.slimframework.com/discussions/questions/359-file-download
> https://stackoverflow.com/questions/20439144/php-how-to-use-a-rest-controller-to-serve-images

还有其他一些.
我也找到了https://github.com/tuupola/slim-image-resize,但我需要使用SVG转换和其他一些它没有的东西.

我猜你是在正确的轨道,但你错过了一些点.
我做了一个新的安装(“苗条/苗条”:“^ 2.6”).这是我的目录结构.
├── composer.json
├── composer.lock
├── public
│ ├── .htaccess
│ └── index.PHP
├── Resources
│ └── Images
│     └── smoke.svg
└── vendor

这是我的Slim应用程序文件index.PHP.顺便说一下,我没有花时间重新调整我留给你的图像.
该应用程序包含资产路径和测试图像路径.

<?PHP
require_once '../vendor/autoload.PHP';

$app = new \Slim\Slim();
$app->get('/assets/:height/:width/:id/:type',function($height,$width,$id,$type) use ($app) {
    $dir = dirname(__DIR__)."/Resources/Images/";

    $im = new Imagick();
    $im->setBackgroundColor(new ImagickPixel('transparent'));
    $svg = file_get_contents($dir.$id.'.svg');
    $im->readImageBlob($svg);

    $im->setImageFormat("png32");
    $im->resizeImage($height,Imagick::FILTER_LANCZOS,1);

     $app->response->header('Content-Type','content-type: image/'.$type );
     echo $im;
     $im->destroy();

});

$app->get('/test-image',function() use ($app) {
    echo '<img src="assets/100/200/smoke/png" />';
});

$app->run();

诀窍是在.htaccess的帮助下从url中删除index.PHP
在文档中有一个用于重写URL的部分; http://docs.slimframework.com/routing/rewrite/-文档也包括Nginx指令.-

.htacess文件内容是;

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
rewriterule ^ index.PHP [QSA,L]

您还需要将Allowoverride部分添加到虚拟主机文件,以便能够使用.htacess文件中的指令.这个去了virtualhost.conf

<Directory "/VAR/www/PUBLIC_DIRECTORY">
    AllowOverride All
    Order allow,deny
    Allow From all
</Directory>

不要忘记重启或重新加载apache.

然后浏览到http://< virtualhost> / test-image它应该不错.

更新:

在您发表评论后,我设置了一个安装了Nginxdocker实例.

这是我的virtualhost配置文件.

server {
server_name default;
root        /var/www/default/public;
index       index.PHP;

client_max_body_size 100M;
fastcgi_read_timeout 1800;

location / {
      try_files $uri /index.PHP?$args;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)${
  expires       max;
  LOG_not_found off;
  access_log    off;
}

  location ~ \.PHP${
      fastcgi_split_path_info ^(.+\.PHP)(/.+)$;
      fastcgi_pass  unix:/var/run/PHP5-FPM.sock;
      fastcgi_index index.PHP;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_SCRIPT_NAME;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }
 }

并更改了PHP代码一点点使用正确的URL为图像生成器路由.我命名了路由并使用urlFor方法来检索框架本身生成的正确url.

<?PHP
error_reporting(E_ALL);
ini_set('display_errors',1);

require_once '../vendor/autoload.PHP';

$app = new \Slim\Slim();
$app->get('/assets/:height/:width/:id/:type','content-type: image/'.$type );
     echo $im;
     $im->destroy();

})->name('generate-image');

$app->get('/test-image',function() use ($app) {

    $imageUrl = $app->urlFor('generate-image',array('height' => '200','width' => '200','id' => 'smoke','type' => 'png')
                            );

    echo '<img src="'.$imageUrl.'" />';
});

$app->run();

当我浏览到http:// localhost / test-image url时,一切看起来都很完美.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 使用Slim框架提供图像/集合全部内容,希望文章能够帮你解决php – 使用Slim框架提供图像/集合所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。