optipic-io/optipic-cdn-php
Composer 安装命令:
composer require optipic-io/optipic-cdn-php
包简介
OptiPic CDN library to convert image urls contains in html/text data
关键字:
README 文档
README
Lib for PHP to integrate with CDN OptiPic.io (automatic images optimization and compression service)
Use ImgUrlConverter class to automatic convert all image URLs on your site.
| English | Español | Deutsch | Türk | Français | Italiano | Português | Polski | Čeština | Русский | Беларуская | 中国 | 日本 | বেঙ্গল | 한국인 |
How to use
- Register your account on OptiPic.io site.
- Add your site on OptiPic CDN Control Panel.
- Get your site ID from OptiPic CDN Control Panel sites list.
- Download this lib to your site.
- Use this library according use cases below
Administration area to install lib and configure it
After downloaded all code of this repository you may open admin area in your browser:
https://mydomain.com/optipic-cdn-php/admin/admin.php?key=b9k7o34rnfc5kco6m7fmjrts7u
Use case #1: Automatic convert image URLs using 'auto_prepend_file' php-directive
Inlude our /optipic-cdn-php/auto_prepend_file.php file in auto_prepend_file php.ini directive.
You may do it in .user.ini or php.ini or .htaccess.
Example using .htaccess
php_value auto_prepend_file "<SITE_ROOT_DIRECTORY>/optipic-cdn-php/optipic-cdn-php/auto_prepend_file.php"
Example using php.ini or .user.ini
; Automatically add files before PHP document.
; http://php.net/auto-prepend-file
auto_prepend_file = <SITE_ROOT_DIRECTORY>/optipic-cdn-php/optipic-cdn-php/auto_prepend_file.php
Hosting limitations to using auto_prepend_file php-directive
Some hostings allow you to set auto_prepend_file only upon request to support.
Examples of such hostings:
- ukraine.com.ua (https://www.ukraine.com.ua/wiki/hosting/php/auto_prepend_file/)
Use case #2: Automatic convert image URLs using your site's entry point php-script
You may include our 1-line converter in on the top of your site's entry point (e.g. /index.php).
require_once __DIR__.'/optipic-cdn-php/optipic-cdn-php/ImgUrlConverter.php'; ob_start(array('\optipic\cdn\ImgUrlConverter', 'convertHtml')); .... <YOUR ENTRY POINT LOGIC> ....
Use case #3: Manually using convert function of our lib in your code
You may use our lib to convert image URLs exactly where you want in your project to convert whole HTML-block contains image URLs.
$converterOptiPic = new \optipic\cdn\ImgUrlConverter(array( 'site_id' => 99999999, // your SITE ID from CDN OptiPic controll panel 'domains' => array('mydomain.com', 'www.mydomain.com'), // list of domains should replace to cdn.optipic.io 'exclusions_url' => array('/test/test/index.php',), // list of URL exclusions - where is URL should not converted 'whitelist_img_urls' => array(), // whitelist of images URL - what should to be converted (parts or full urls start from '/') 'srcset_attrs' => array('srcset', 'data-srcset'), // tag's srcset attributes // @see https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images )); $htmlConverted = $converterOptiPic->convertHtml($html);
Configuration
Option #1: Using file config.php in lib's root
File format:
return array( 'site_id' => '0', // your SITE ID from CDN OptiPic controll panel 'domains' => array(), // list of domains should replace to cdn.optipic.io 'exclusions_url' => array(), // list of URL exclusions - where is URL should not converted 'whitelist_img_urls' => array(), // whitelist of images URL - what should to be converted (parts or full urls start from '/') 'srcset_attrs' => array('srcset', 'data-srcset'), // tag's srcset attributes // @see https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images );
In this case config will be automatic loaded in auto_prepend_file.php.
Option #2: Using ImgUrlConverter::loadConfig();
// Autoload config from config.php ImgUrlConverter::loadConfig(); // Load config from custom config file ImgUrlConverter::loadConfig('<path-to-your-config-file.php>'); // Load config from array ImgUrlConverter::loadConfig(array( 'site_id' => '0', // your SITE ID from CDN OptiPic controll panel 'domains' => array(), // list of domains should replace to cdn.optipic.io 'exclusions_url' => array(), // list of URL exclusions - where is URL should not converted 'whitelist_img_urls' => array(), // whitelist of images URL - what should to be converted (parts or full urls start from '/') 'srcset_attrs' => array('srcset', 'data-srcset'), // tag's srcset attributes // @see https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images ));
Option #3: Pass config data into ImgUrlConverter::__constructor();
$converterOptiPic = new \optipic\cdn\ImgUrlConverter(array( 'site_id' => 99999999, // your SITE ID from CDN OptiPic controll panel 'domains' => array('mydomain.com', 'www.mydomain.com'), // list of domains should replace to cdn.optipic.io 'exclusions_url' => array('/test/test/index.php',), // list of URL exclusions - where is URL should not converted 'whitelist_img_urls' => array(), // whitelist of images URL - what should to be converted (parts or full urls start from '/') ));
Option #1: Using file config.php in lib's root
What will be converted (examples)
<img src="/foo/bar/img.png"/> ---CONVERT--> <img src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img data-src="/foo/bar/img.png"/> ---CONVERT--> <img data-src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img foo-bar-attr='/foo/bar/img.png'/> ---CONVERT--> <img foo-bar-attr='//cdn.optipic.io/site-99999999/foo/bar/img.png'/>
backhround: url(/foo/bar/img.jpg) ---CONVERT--> backhround: url(//cdn.optipic.io/site-99999999/foo/bar/img.jpg)
backhround: url("/foo/bar/img.jpg") ---CONVERT--> backhround: url("//cdn.optipic.io/site-99999999/foo/bar/img.jpg")
backhround: url('/foo/bar/img.jpg') ---CONVERT--> backhround: url('//cdn.optipic.io/site-99999999/foo/bar/img.jpg')
<img src="http://mydomain.com/foo/bar/img.png"/> ---CONVERT--> <img src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img data-src="http://mydomain.com/foo/bar/img.png"/> ---CONVERT--> <img data-src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img foo-bar-attr='http://mydomain.com/foo/bar/img.png'/> ---CONVERT--> <img foo-bar-attr='//cdn.optipic.io/site-99999999/foo/bar/img.png'/>
backhround: url(http://mydomain.com/foo/bar/img.jpg) ---CONVERT--> backhround: url(//cdn.optipic.io/site-99999999/foo/bar/img.jpg)
backhround: url("http://mydomain.com/foo/bar/img.jpg") ---CONVERT--> backhround: url("//cdn.optipic.io/site-99999999/foo/bar/img.jpg")
backhround: url('http://mydomain.com/foo/bar/img.jpg') ---CONVERT--> backhround: url('//cdn.optipic.io/site-99999999/foo/bar/img.jpg')
<img src="https://mydomain.com/foo/bar/img.png"/> ---CONVERT--> <img src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img data-src="https://mydomain.com/foo/bar/img.png"/> ---CONVERT--> <img data-src="//cdn.optipic.io/site-99999999/foo/bar/img.png"/>
<img foo-bar-attr='https://mydomain.com/foo/bar/img.png'/> ---CONVERT--> <img foo-bar-attr='//cdn.optipic.io/site-99999999/foo/bar/img.png'/>
backhround: url(https://mydomain.com/foo/bar/img.jpg) ---CONVERT--> backhround: url(//cdn.optipic.io/site-99999999/foo/bar/img.jpg)
backhround: url("https://mydomain.com/foo/bar/img.jpg") ---CONVERT--> backhround: url("//cdn.optipic.io/site-99999999/foo/bar/img.jpg")
backhround: url('https://mydomain.com/foo/bar/img.jpg') ---CONVERT--> backhround: url('//cdn.optipic.io/site-99999999/foo/bar/img.jpg')
<img src="https://NOTmydomain.com/foo/bar/img.png"/> ---CONVERT--> <img src="https://NOTmydomain.com/foo/bar/img.png"/>
<img data-src="https://NOTmydomain.com/foo/bar/img.png"/> ---CONVERT--> <img data-src="https://NOTmydomain.com/foo/bar/img.png"/>
<img foo-bar-attr='https://NOTmydomain.com/foo/bar/img.png'/> ---CONVERT--> <img foo-bar-attr='https://NOTmydomain.com/foo/bar/img.png'/>
backhround: url(https://NOTmydomain.com/foo/bar/img.jpg) ---CONVERT--> backhround: url(https://NOTmydomain.com/foo/bar/img.jpg)
backhround: url("http://NOTmydomain.com/foo/bar/img.jpg") ---CONVERT--> backhround: url("http://NOTmydomain.com/foo/bar/img.jpg")
backhround: url('https://NOTmydomain.com/foo/bar/img.jpg') ---CONVERT--> backhround: url('https://NOTmydomain.com/foo/bar/img.jpg')
More live examples see in /examples/example.php script.
Where is php.ini on different hostings
Beget
<SITE_ROOT_DIRECTORY>/cgi-bin/php.ini
Reg.ru
If it does not work you also may create/edit file .user.ini in the site's root directory - alternative of php.ini file.
https://www.php.net/manual/en/configuration.file.per-user.php
ionCube Warning
If you use ionCube on your site you shouldn't add auto_prepend_file direcive in php settings.
The ionCube does not support the directive auto_prepend_file and throws an error.
Instead, add the OptiPic connection directly to your site's entry point (usually an index.php) as stated above.
Example for ImageCMS (it's using ionCube)
Into index.php insert OptiPic logic before including core/CodeIgniter.php
// OptiPic // -------------------------------------------------------------------- if(php_sapi_name() !== 'cli') { require_once __DIR__.'/optipic-cdn-php/optipic-cdn-php/ImgUrlConverter.php'; ob_start(array('\optipic\cdn\ImgUrlConverter', 'convertHtml')); } // -------------------------------------------------------------------- /* * -------------------------------------------------------------------- * LOAD THE BOOTSTRAP FILE * -------------------------------------------------------------------- * * And away we go... * */ require_once BASEPATH . 'core/CodeIgniter.php';
Which URLs we recommend to exclude based on your CMS
Wordpress
/wp-admin/*
Bitrix
/bitrix/*
Joomla
/administrator/*
Drupal
/en/admin/*
/ru/admin/*
/<YOUR_LANG>/admin/*
MODX
/manager/*
OpenCart
/admin/*
HostCMS
/admin/*
Other CMS
Exclude your CMS admin area (control panel) folder with mask * at the end to exclude all nested urls
optipic-io/optipic-cdn-php 适用场景与选型建议
optipic-io/optipic-cdn-php 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 3 次下载、GitHub Stars 达 2, 最近一次更新时间为 2023 年 01 月 01 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「compression」 「minify」 「optimization」 「PageSpeed」 「speedup」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 optipic-io/optipic-cdn-php 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 optipic-io/optipic-cdn-php 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 optipic-io/optipic-cdn-php 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Asset Management for PHP
CSS/Javascript Minificator, Compressor and Concatenator for TYPO3 - highly configurable frontend asset optimization for CSS/JS merging, minification and compression with optional body parsing, async/defer loading, inline output, data-ignore exclusions, SRI integrity validation/calculation, external
Image optimization / compression library. This library is able to optimize png, jpg and gif files in very easy and handy way. It uses optipng, pngquant, pngcrush, pngout, gifsicle, jpegoptim and jpegtran tools.
Caching and compression for Twig assets (JavaScript and CSS).
CSS & JavaScript minifier for Silverstripe
A package for pack css and javascript files
统计信息
- 总下载量: 3
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 17
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-01-01