optipic-io/optipic-cdn-php

OptiPic CDN 库,用于转换 HTML/文本数据中包含的图片 URL

dev-main 2023-01-02 19:16 UTC

This package is auto-updated.

Last update: 2024-09-30 01:20:12 UTC


README

PHP 库,用于与 OptiPic.io CDN 集成(自动图片优化和压缩服务)。使用 ImgUrlConverter自动转换您网站上的所有图片 URL

| English | Español | Deutsch | Türk | Français | Italiano | Português | Polski | Čeština | Русский | Беларуская | 中国 | 日本 | বেঙ্গল | 한국인 |

如何使用

  1. 在 OptiPic.io 网站上注册您的账户。
  2. 将您的网站添加到 OptiPic CDN 控制面板
  3. 从 OptiPic CDN 控制面板网站列表中获取您的网站 ID
  4. 将此库下载到您的网站。
  5. 根据以下用例使用此库

管理区域以安装库并配置

下载此存储库中的所有代码后,您可以在浏览器中打开管理区域

https://mydomain.com/optipic-cdn-php/admin/admin.php?key=b9k7o34rnfc5kco6m7fmjrts7u cdn optipic admin area

用例 #1:使用 'auto_prepend_file' php 指令自动转换图片 URL

auto_prepend_file php.ini 指令中包含我们的 /optipic-cdn-php/auto_prepend_file.php 文件。

您可以在 .user.iniphp.ini.htaccess 中完成此操作。

使用 .htaccess 的示例

php_value auto_prepend_file "<SITE_ROOT_DIRECTORY>/optipic-cdn-php/optipic-cdn-php/auto_prepend_file.php"

使用 php.ini.user.ini 的示例

; Automatically add files before PHP document.
; https://php.ac.cn/auto-prepend-file
auto_prepend_file = <SITE_ROOT_DIRECTORY>/optipic-cdn-php/optipic-cdn-php/auto_prepend_file.php

使用 auto_prepend_file php 指令的限制

一些主机只允许您在请求支持的情况下设置 auto_prepend_file
此类主机的示例

用例 #2:使用您网站的入口点 php 脚本自动转换图片 URL

您可以在您网站的入口点(例如 /index.php)顶部包含我们的一行转换器。

require_once __DIR__.'/optipic-cdn-php/optipic-cdn-php/ImgUrlConverter.php';

ob_start(array('\optipic\cdn\ImgUrlConverter', 'convertHtml'));

....
<YOUR ENTRY POINT LOGIC>
....

用例 #3:在您的代码中手动使用库的转换函数

您可以使用我们的库在项目中精确地转换您想要的图片 URL,以转换包含图片 URL 的整个 HTML 块。

$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://mdn.org.cn/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images
));

$htmlConverted = $converterOptiPic->convertHtml($html);

配置

选项 #1:在库根目录中使用 config.php 文件

文件格式

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://mdn.org.cn/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images
);

在这种情况下,配置将自动加载到 auto_prepend_file.php 中。

选项 #2:使用 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://mdn.org.cn/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images
));

选项 #3:将配置数据传递给 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 '/')
));

选项 #1:在库根目录中使用 config.php 文件

将被转换的内容(示例)

<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')

更多现场示例请查看 /examples/example.php 脚本。

不同主机上的 php.ini 位置

Beget

<SITE_ROOT_DIRECTORY>/cgi-bin/php.ini

Reg.ru

https://www.reg.ru/support/hosting-i-servery/yazyki-programmirovaniya-i-skripty/kak-izmenit-parametry-php

如果不起作用,您也可以在网站的根目录中创建/编辑 .user.ini 文件 - 这是 php.ini 文件的替代品。[链接](https://php.ac.cn/manual/en/configuration.file.per-user.php)

ionCube 警告

如果您在网站上使用 ionCube,则不应在 php 设置中添加 auto_prepend_file 指令。
ionCube 不支持 auto_prepend_file 指令,并[引发错误](https://www.ioncube.com/sa/gui_docs/settings_restrictions.html)。
相反,如上所述,直接将 OptiPic 连接添加到您网站的入口点(通常是 index.php)。

针对 ImageCMS 的示例(它使用 ionCube

index.php 中插入 OptiPic 逻辑,在包含 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';

根据您的 CMS 推荐排除哪些 URL

Wordpress

/wp-admin/*

Bitrix

/bitrix/*

Joomla

/administrator/*

Drupal

/en/admin/*
/ru/admin/*
/<YOUR_LANG>/admin/*

MODX

/manager/*

OpenCart

/admin/*

HostCMS

/admin/*

其他 CMS

使用 * 结尾的掩码排除您的 CMS 管理区域(控制面板)文件夹,以排除所有嵌套 URL