{"id":22275,"date":"2021-02-01T17:55:46","date_gmt":"2021-02-01T17:55:46","guid":{"rendered":"http:\/\/introducing_the_cloudinary_php_sdk_mark_ii"},"modified":"2021-02-01T17:55:46","modified_gmt":"2021-02-01T17:55:46","slug":"introducing_the_cloudinary_php_sdk_mark_ii","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii","title":{"rendered":"Introducing the Cloudinary PHP SDK, Mark II"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><p>Cloudinary supports a wide range of <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_sdks\">SDKs<\/a>, many of which have been around for quite some time now. The <a href=\"https:\/\/cloudinary.com\/documentation\/php_integration\">PHP SDK<\/a> was initially released in 2012, nine years ago, and much has changed since then with regard to programming languages and development concepts. This means that the SDKs need a refresh in order to be aligned with the latest standards and best practices, also to comply with the current language standards and syntax usage.<\/p>\n<p>Since our existing SDKs have to support a wide range of specific technology versions, reducing support in a minor release is unacceptable. So, Cloudinary is <a href=\"https:\/\/cloudinary.com\/blog\/get_ready_for_cloudinary_s_next_generation_javascript_sdks\">revamping the entire SDK suite<\/a>, making it more modern, intuitive, and user friendly. The PHP SDK is the first to undergo a major overhaul with a major release. Our main focus for v2 is on enhancing developer experience with the following features:<\/p>\n<ul>\n<li>Structured action-based syntax<\/li>\n<li>High discoverability with integrated autocomplete<\/li>\n<li>Maintainability<\/li>\n<li>Error handling<\/li>\n<li>Preserving flexibility and future compatibility<\/li>\n<li>Comprehensive reference documentation<\/li>\n<\/ul>\n<h2>Actions<\/h2>\n<p>Cloudinary\u2019s SDK v1 suite was all about wrapping our URL syntax, which requires knowledge of the URL\u2019s transformation syntax. For example, when creating a simple transformation on an image that includes rotating, cropping, and an effect, the v1 code reads as follows:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\">#SDK 1<\/span>\ncloudinary_url(<span class=\"hljs-string\">\"bike\"<\/span>, \n  <span class=\"hljs-keyword\">array<\/span>(\n    <span class=\"hljs-string\">\"angle\"<\/span>=&gt;<span class=\"hljs-number\">20<\/span>, \n    <span class=\"hljs-string\">\"crop\"<\/span>=&gt;<span class=\"hljs-string\">\"crop\"<\/span>, \n    <span class=\"hljs-string\">\"gravity\"<\/span>=&gt;<span class=\"hljs-string\">\"face\"<\/span>, \n    <span class=\"hljs-string\">\"effect\"<\/span>=&gt;<span class=\"hljs-string\">\"cartoonify\"<\/span>));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>As part of our focus on the developer experience, we want the new SDK to have an easy, strongly typed, discoverable syntax, enabling developers to write their code quickly, without compromising the flexibility and future compatibility in the current SDKs. To that end, we introduced a structured way of building action-oriented transformations. The new code for the example above reads this way:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\">#SDK 2<\/span>\n$cld = <span class=\"hljs-keyword\">new<\/span> Cloudinary();\n$cld-&gt;image(<span class=\"hljs-string\">'bike'<\/span>)\n  -&gt;rotate(Rotate::byAngle(<span class=\"hljs-number\">20<\/span>))\n  -&gt;resize(Resize::crop()-&gt;gravity(Gravity::focusOn(FocusOn::face()))\n  -&gt;effect(Effect::cartoonify())-&gt;toUrl();\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Discoverability<\/h2>\n<p>The action-oriented structure in v2 improves discoverability, meaning that you need not learn the URL transformation syntax and can code more easily. The new structure also means that\u2014<\/p>\n<ul>\n<li>You work in a typed environment, in which the classes, methods, and variables of the SDK are autocompleted by the IDE, with the relevant options and values listed in a pop-up while you\u2019re typing.<\/li>\n<li>The IDE verifies the validity of your code, catching errors early on with no time lag for server errors.<\/li>\n<\/ul>\n<h2>Maintainability and Configuration<\/h2>\n<p>SDK v2 enables the adoption of new features quickly, reduces support of old technologies, and simplifies the configuration options. With the new modular structure, you can decide what parts of the SDK to use, configuring settings in several levels through a configuration hierarchy. For example, to set the configuration globally via a JSON object, code like this:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Cloudinary<\/span>\\<span class=\"hljs-title\">Configuration<\/span>\\<span class=\"hljs-title\">Configuration<\/span>;\nConfiguration::instance(&#91;\n  <span class=\"hljs-string\">'cloud'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'cloud_name'<\/span> =&gt; <span class=\"hljs-string\">'my_cloud_name'<\/span>, \n    <span class=\"hljs-string\">'api_key'<\/span> =&gt; <span class=\"hljs-string\">'my_key'<\/span>, \n    <span class=\"hljs-string\">'api_secret'<\/span> =&gt; <span class=\"hljs-string\">'my_secret'<\/span>],\n  <span class=\"hljs-string\">'url'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'secure'<\/span> =&gt; <span class=\"hljs-keyword\">true<\/span>]]);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The new SDK also supports multiple instances, each of which you can configure with a Cloudinary object. For example:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Cloudinary<\/span>\\<span class=\"hljs-title\">Configuration<\/span>\\<span class=\"hljs-title\">Configuration<\/span>;\n$cloudinary = <span class=\"hljs-keyword\">new<\/span> Cloudinary(&#91;\n  <span class=\"hljs-string\">'cloud'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'cloud_name'<\/span> =&gt; <span class=\"hljs-string\">'my_cloud_name'<\/span>,\n    <span class=\"hljs-string\">'api_key'<\/span>  =&gt; <span class=\"hljs-string\">'my_key'<\/span>,\n    <span class=\"hljs-string\">'api_secret'<\/span> =&gt; <span class=\"hljs-string\">'my_secret'<\/span>,\n  <span class=\"hljs-string\">'url'<\/span> =&gt; &#91;\n    <span class=\"hljs-string\">'secure'<\/span> =&gt; <span class=\"hljs-keyword\">true<\/span>]]]);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Management APIs<\/h2>\n<p>PHP SDK v2 offers revamped Upload and Admin API methods for managing, organizing, and creating media assets. See the examples below.<\/p>\n<p>To upload an asset to your account:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Cloudinary<\/span>\\<span class=\"hljs-title\">Api<\/span>\\<span class=\"hljs-title\">Upload<\/span>\\<span class=\"hljs-title\">UploadApi<\/span>;\n(<span class=\"hljs-keyword\">new<\/span> UploadApi())-&gt;upload(<span class=\"hljs-string\">'my_image.jpg'<\/span>)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>To list all the image tags that begin with <code>shoe<\/code>:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-keyword\">use<\/span> <span class=\"hljs-title\">Cloudinary<\/span>\\<span class=\"hljs-title\">Api<\/span>\\<span class=\"hljs-title\">Admin<\/span>\\<span class=\"hljs-title\">AdminApi<\/span>;\n$result = (<span class=\"hljs-keyword\">new<\/span> AdminApi())-&gt;tags(&#91;<span class=\"hljs-string\">\"prefix\"<\/span> =&gt; <span class=\"hljs-string\">\"shoe\"<\/span>]);\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Documentation<\/h2>\n<p>PHP SDK v2 includes extensive documentation strings within the code, making it much easier to understand our code and its purpose. The strings are displayed within the IDE tooltips and automatically exported into an autogenerated <a href=\"https:\/\/cloudinary.com\/documentation\/sdks\/php\/index\"><em>PHP SDK Reference Guide<\/em><\/a>, an addition to the <a href=\"https:\/\/cloudinary.com\/documentation\/php_integration\"><em>Cloudinary PHP SDK User Guide<\/em><\/a>.<\/p>\n<h2>Backward Compatibility and Migration<\/h2>\n<p>Be assured that all your existing URLs embedded in webpages will continue to work. Only the way in which PHP SDK v2 generates transformations has changed, not the output. So, just keep the URLs that are in place and start creating new ones with v2.<\/p>\n<p>Even though the new syntax is much clearer, more logical, and more intuitive, a significant conceptual change does exist between the two syntaxes. Moving to a new SDK generally entails updating your code.<\/p>\n<p>To help you with that update with minimal changes and without having to figure out the nuances and to translate your code to the new syntax, we\u2019ve added a special action called <code>fromParams<\/code> with which you can enclose the code syntax in v1 of the SDK.<\/p>\n<p>For example, this code in SDK v1\u2014<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\">#SDK 1<\/span>\ncl_image_tag(<span class=\"hljs-string\">\"actor\"<\/span>, <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"transformation\"<\/span>=&gt;<span class=\"hljs-keyword\">array<\/span>(\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"effect\"<\/span>=&gt;<span class=\"hljs-string\">\"cartoonify\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"radius\"<\/span>=&gt;<span class=\"hljs-string\">\"max\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"effect\"<\/span>=&gt;<span class=\"hljs-string\">\"outline:100\"<\/span>, <span class=\"hljs-string\">\"color\"<\/span>=&gt;<span class=\"hljs-string\">\"lightblue\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"background\"<\/span>=&gt;<span class=\"hljs-string\">\"lightblue\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"height\"<\/span>=&gt;<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-string\">\"crop\"<\/span>=&gt;<span class=\"hljs-string\">\"scale\"<\/span>)\n)));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>\u2014becomes the following:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php shcb-wrap-lines\"><span class=\"hljs-comment\">#SDK 2<\/span>\nImageTag::fromParams(<span class=\"hljs-string\">\"actor\"<\/span>, <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"transformation\"<\/span>=&gt;<span class=\"hljs-keyword\">array<\/span>(\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"effect\"<\/span>=&gt;<span class=\"hljs-string\">\"cartoonify\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"radius\"<\/span>=&gt;<span class=\"hljs-string\">\"max\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"effect\"<\/span>=&gt;<span class=\"hljs-string\">\"outline:100\"<\/span>, <span class=\"hljs-string\">\"color\"<\/span>=&gt;<span class=\"hljs-string\">\"lightblue\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"background\"<\/span>=&gt;<span class=\"hljs-string\">\"lightblue\"<\/span>),\n  <span class=\"hljs-keyword\">array<\/span>(<span class=\"hljs-string\">\"height\"<\/span>=&gt;<span class=\"hljs-number\">300<\/span>, <span class=\"hljs-string\">\"crop\"<\/span>=&gt;<span class=\"hljs-string\">\"scale\"<\/span>)\n)));\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p><em>For more details and examples on upgrading to v2 of the SDK, see our <a href=\"https:\/\/cloudinary.com\/documentation\/php2_migration\"><em>PHP Migration Guide<\/em><\/a>.<\/em><\/p>\n<h2>Summary<\/h2>\n<p>PHP SDK v2 offers an action-oriented, structured syntax; high discoverability; integrated autocomplete, an intuitive <a href=\"https:\/\/cloudinary.com\/documentation\/php2_migration\">migration path<\/a>; along with in-depth reference documentation. Consequently, coding to leverage Cloudinary\u2019s capabilities is much easier. For details, check out our <a href=\"https:\/\/cloudinary.com\/documentation\/php_integration#overview\">PHP documentation<\/a> and the <a href=\"https:\/\/cloudinary.com\/documentation\/sdks\/php\/index\"><em>PHP Reference Guide<\/em><\/a>.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":22276,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[229,263],"class_list":["post-22275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-php","tag-sdk"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>New Cloudinary PHP SDK Released<\/title>\n<meta name=\"description\" content=\"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing the Cloudinary PHP SDK, Mark II\" \/>\n<meta property=\"og:description\" content=\"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-01T17:55:46+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/cloudinary.com\/blog\/wp-content\/uploads\/sites\/12\/2022\/02\/PHPv2-SDK.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1540\" \/>\n\t<meta property=\"og:image:height\" content=\"847\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Introducing the Cloudinary PHP SDK, Mark II\",\"datePublished\":\"2021-02-01T17:55:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\"},\"wordCount\":7,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA\",\"keywords\":[\"PHP\",\"SDK\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2021\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\",\"url\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\",\"name\":\"New Cloudinary PHP SDK Released\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA\",\"datePublished\":\"2021-02-01T17:55:46+00:00\",\"description\":\"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA\",\"width\":1540,\"height\":847},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing the Cloudinary PHP SDK, Mark II\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"New Cloudinary PHP SDK Released","description":"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii","og_locale":"en_US","og_type":"article","og_title":"Introducing the Cloudinary PHP SDK, Mark II","og_description":"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.","og_url":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii","og_site_name":"Cloudinary Blog","article_published_time":"2021-02-01T17:55:46+00:00","og_image":[{"width":1540,"height":847,"url":"http:\/\/cloudinary.com\/blog\/wp-content\/uploads\/sites\/12\/2022\/02\/PHPv2-SDK.png","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii"},"author":{"name":"","@id":""},"headline":"Introducing the Cloudinary PHP SDK, Mark II","datePublished":"2021-02-01T17:55:46+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii"},"wordCount":7,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA","keywords":["PHP","SDK"],"inLanguage":"en-US","copyrightYear":"2021","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii","url":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii","name":"New Cloudinary PHP SDK Released","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA","datePublished":"2021-02-01T17:55:46+00:00","description":"A new major release of the Cloudinary PHP SDK features action-oriented, structured syntax; high discoverability; and integrated autocomplete.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA","width":1540,"height":847},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/introducing_the_cloudinary_php_sdk_mark_ii#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing the Cloudinary PHP SDK, Mark II"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649719532\/Web_Assets\/blog\/PHPv2-SDK_2227623753\/PHPv2-SDK_2227623753.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=22275"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/22275\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/22276"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=22275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=22275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=22275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}