Lightweight PHP wrapper for OVH APIs. That's the easiest way to use OVH.com APIs in your PHP applications.

Overview

PHP Wrapper for OVH APIs

This PHP package is a lightweight wrapper for OVH APIs. That's the easiest way to use OVH.com APIs in your PHP applications.

Build Status HHVM Status

get('/me')['firstname']; ?>">

/**
 * # Instantiate. Visit https://api.ovh.com/createToken/index.cgi?GET=/me
 * to get your credentials
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

$ovh = new Api( $applicationKey,
                $applicationSecret,
                $endpoint,
                $consumer_key);
echo "Welcome " . $ovh->get('/me')['firstname'];
?>

Quickstart

To download this wrapper and integrate it inside your PHP application, you can use Composer.

Quick integration with the following command:

composer require ovh/ovh

Or add the repository in your composer.json file or, if you don't already have this file, create it at the root of your project with this content:

{
    "name": "Example Application",
    "description": "This is an example of OVH APIs wrapper usage",
    "require": {
        "ovh/ovh": "dev-master"
    }
}

Then, you can install OVH APIs wrapper and dependencies with:

php composer.phar install

This will install ovh/ovh to ./vendor, along with other dependencies including autoload.php.

OVH cookbook

Do you want to use OVH APIs? Maybe the script you want is already written in the example part of this repository!

How to login as a user?

To communicate with APIs, the SDK uses a token on each request to identify the user. This token is called Consumer Key. To have a validated Consumer Key, you need to redirect your user on specific authentication page. Once the user has logged in, the token is validated and user will be redirected on $redirection url.

'GET', 'path' => '/me*' ]); // Get credentials $conn = new Api($applicationKey, $applicationSecret, $endpoint); $credentials = $conn->requestCredentials($rights, $redirection); // Save consumer key and redirect to authentication page $_SESSION['consumer_key'] = $credentials["consumerKey"]; header('location: '. $credentials["validationUrl"]); ... ?>">

require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

session_start();

// Informations about your application
$applicationKey = "your_app_key";
$applicationSecret = "your_app_secret";
$redirection = "http://your_url.ovh";

// Information about API and rights asked
$endpoint = 'ovh-eu';
$rights = array( (object) [
    'method'    => 'GET',
    'path'      => '/me*'
]);

// Get credentials
$conn = new Api($applicationKey, $applicationSecret, $endpoint);
$credentials = $conn->requestCredentials($rights, $redirection);

// Save consumer key and redirect to authentication page
$_SESSION['consumer_key'] = $credentials["consumerKey"];
header('location: '. $credentials["validationUrl"]);
...
?>

How to use OVH API to enable network burst on SBG1 servers?

get('/dedicated/server/'); foreach ($servers as $server) { // Search servers inside SBG1 $details = $conn->get('/dedicated/server/'. $server); if ($details['datacenter'] == 'sbg1') { // Activate burst on server $content = (object) array('status' => "active"); $conn->put('/dedicated/server/'. $server . '/burst', $content); echo "We burst " . $server; } } ?>">

require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

// Informations about your application
$applicationKey = "your_app_key";
$applicationSecret = "your_app_secret";
$consumer_key = "your_consumer_key";

// Information about API and rights asked
$endpoint = 'ovh-eu';

// Get servers list
$conn = new Api(    $applicationKey,
                    $applicationSecret,
                    $endpoint,
                    $consumer_key);
$servers = $conn->get('/dedicated/server/');

foreach ($servers as $server) {

    // Search servers inside SBG1
    $details = $conn->get('/dedicated/server/'. $server);
    if ($details['datacenter'] == 'sbg1') {

        // Activate burst on server
        $content = (object) array('status' => "active");
        $conn->put('/dedicated/server/'. $server . '/burst', $content);
        echo "We burst " . $server;
    }
}

?>

How to customize HTTP client configuration?

You can inject your own HTTP client with your specific configuration. For instance, you can edit user-agent and timeout for all your requests

setDefaultOption('timeout', 1); $client->setDefaultOption('headers', array('User-Agent' => 'api_client') ); // Get servers list $conn = new Api( $applicationKey, $applicationSecret, $endpoint, $consumer_key, $client); $webHosting = $conn->get('/hosting/web/'); foreach ($webHosting as $webHosting) { echo "One of our web hosting: " . $webHosting . "\n"; } ?>">

require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;
use GuzzleHttp\Client;

// Informations about your application
$applicationKey = "your_app_key";
$applicationSecret = "your_app_secret";
$consumer_key = "your_consumer_key";

// Information about API and rights asked
$endpoint = 'ovh-eu';

$client = new Client();
$client->setDefaultOption('timeout', 1);
$client->setDefaultOption('headers', array('User-Agent' => 'api_client') );

// Get servers list
$conn = new Api(    $applicationKey,
                    $applicationSecret,
                    $endpoint,
                    $consumer_key,
                    $client);
$webHosting = $conn->get('/hosting/web/');

foreach ($webHosting as $webHosting) {
        echo "One of our web hosting: " . $webHosting . "\n";
}
?>

How to print API error details?

Under the hood, php-ovh uses GuzzlePHP 6 by default to issue API requests. If everything goes well, it will return the response directly as shown in the examples above. If there is an error like a missing endpoint or object (404), an authentication or authorization error (401 or 403) or a parameter error, the Guzzle will raise a GuzzleHttp\Exception\ClientException exception. For server-side errors (5xx), it will raise a GuzzleHttp\Exception\ServerException exception.

You can get the error details with a code like:

get('/me')['firstname']; } catch (GuzzleHttp\Exception\ClientException $e) { $response = $e->getResponse(); $responseBodyAsString = $response->getBody()->getContents(); echo $responseBodyAsString; } ?>">

/**
 * # Instantiate. Visit https://api.ovh.com/createToken/index.cgi?GET=/me
 * to get your credentials
 */
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;

$ovh = new Api( $applicationKey,
                $applicationSecret,
                $endpoint,
                $consumer_key);

try {
    echo "Welcome " . $ovh->get('/me')['firstname'];
} catch (GuzzleHttp\Exception\ClientException $e) {
    $response = $e->getResponse();
    $responseBodyAsString = $response->getBody()->getContents();
    echo $responseBodyAsString;
}
?>

How to build the documentation?

Documentation is based on phpdocumentor. To install it with other quality tools, you can install local npm project in a clone a project

git clone https://github.com/ovh/php-ovh.git
cd php-ovh
php composer.phar install

To generate documentation, it's possible to use directly:

vendor/bin/phing phpdocs

Documentation is available in docs/ directory.

How to run tests?

Tests are based on phpunit. To install it with other quality tools, you can install local npm project in a clone a project

git https://github.com/ovh/php-ovh.git
cd php-ovh
php composer.phar install
vendor/bin/phpunit tests/ApiTest.php

To run functionals tests, you need to provide valid API credentials, that you can provide them via environment:

APP_KEY=xxx APP_SECRET=xxx CONSUMER=xxx ENDPOINT=xxx vendor/bin/phpunit tests/ApiFunctionalTest.php

Supported APIs

OVH Europe

OVH US

OVH North America

So you Start Europe

So you Start North America

Kimsufi Europe

Kimsufi North America

Runabove

Related links

Comments
  • Using OVH PHP API

    Using OVH PHP API

    Hi!

    I'm trying to make simple GET request to test how this API works. I have used many days for this but still haven't got this to work.

    So I have Application Key, Application Secret and Consumer Key (with granted permissions to /*) and I have downloaded all the decencies (php-ovh-2.0.1-with-dependencies). I have correctly changed correct keys to example codes but they still are not working. I have tested keys with ovh python and that's simple, they are working. With all the examples on the page I get server error:

    The * page isn’t working

    • is currently unable to handle this request.

    My ovh hosting is using PHP 5.4 and when using this page: https://api.ovh.com/console/ I can use all the GET reguest and they are working. Am I missing something or how this works? I don't have composer on my page.

    opened by Pixuu 24
  • guzzlehttp/psr7:3.0 -> Attempted to call function

    guzzlehttp/psr7:3.0 -> Attempted to call function "build_query" from namespace "GuzzleHttp\Psr7".

    In Api.php line 266: Attempted to call function "build_query" from namespace "GuzzleHttp\Psr7".

    Namespace: GuzzleHttp\Psr7 Deprecated: build_query will be removed in guzzlehttp/psr7:2.0. Use Query::build instead.

    PS: Works with : $query = \GuzzleHttp\Psr7\Query::build($query);

    opened by rdemendoza 9
  • Bad request for DELETE /telephony/{billingAccount}/service/{serviceName}

    Bad request for DELETE /telephony/{billingAccount}/service/{serviceName}

    Bonjour Vincent,

    lors de l'appel à DELETE /telephony/{billingAccount}/service/{serviceName} j'ai un 400 Bad Request avec le message INVALID_SIGNATURE quelque soit les droits du token utilisé (DELETE sur /*) sur ce SDK (fonctionne sur d'autres SDK php avec les mêmes paramètres) Avez-vous une idée de l'origine du blocage? Merci Alexandre

    opened by alexandrejacq 6
  • [QUESTION] Renew domains

    [QUESTION] Renew domains

    I am checking some operation in the API Console about domains.

    For me it is very useful the authInfo, unlock, owo, etc. But it would be a lot useful if I could renew the domains in some way, adding even a money balance to my account or so.

    Would be available this at some point, so I can automatize the domain renovations? Other domain providers offers an API for this, and I see a lack of feature on OVH, but I would like stay with OVH too if this gets implemented.

    opened by shakaran 5
  • Use a PHP build tool, Phing instead of Grunt.

    Use a PHP build tool, Phing instead of Grunt.

    As I already mentioned in the #35 issue, I think it's more suitable to use a PHP build tool instead of a JS one. I don't tell that Grunt is not a powerful tool but it's a complicated installation process to be able to run tests.

    Phing is required as a composer package and can be run directly after the composer install.

    Examples:

    vendor/bin/phing
    vendor/bin/phing test
    vendor/bin/phing clean
    vendor/bin/phing phplint
    vendor/bin/phing phpcs
    vendor/bin/phing phpunit
    vendor/bin/phing phpunit -Donly.units=true #The travis test process
    

    The only difference here is the watch process. Phing doesn't have that kind of feature. It can be emulated with different tasks but require a lot more work. I think that PR is the first step, maybe we can go further if necessary.

    opened by shulard 5
  • Update to Guzzle 6.0 and add 100% code coverage

    Update to Guzzle 6.0 and add 100% code coverage

    I rewritten the API to support the new Guzzle 6.0 I also added 100% code coverage and completed the PhpDoc and type hintings

    No method name has changed, only the to request with Guzzle.

    Since Guzzle 6.0 is clearly not complatible with <6.0, I think this PR should be on a new dev branch (and a new major version )

    opened by ByScripts 5
  • Add the package license for composer

    Add the package license for composer

    this allows the license to be known on Packagist instead of marking it as unknown license: https://packagist.org/packages/ovh/ovh

    The LICENSE file looks like the text of the MIT license, which is why I did the update this way. If it is not actually the MIT license but a different one, please provide the actual license code.

    opened by stof 5
  • [Modify Api.php and DYNHost]: Correct path in php to use in GET/POST/DELETE functions of /ip/{ip}/

    [Modify Api.php and DYNHost]: Correct path in php to use in GET/POST/DELETE functions of /ip/{ip}/

    This fantastic story is about how fantastic OVH has developed its proprietary programming in APIs. Terribly sad part of this story is how little OVH provided user friendly interface, examples or support until today. The example scripts provided are just not sufficient.

    Only after a torturous playing with /Ovh/Api.php and firewall.php (created based on default php code from API website, code unchanged) with correct details to login, I found sending an input to /ip/{ip}/firewall/{ipOnFirewall}/rule from my server is useless as it contains dots in the URI query string (from an IP Address).

    More details are here:

    Get PHP to stop replacing '.' characters in $_GET or $_POST arrays?

    https://stackoverflow.com/questions/68651/get-php-to-stop-replacing-characters-in-get-or-post-arrays

    One solution is to have Api.php classes modified to convert dots into underscores at client, when it transmits the query string with dots. Thereafter, the receiving server reconverts the changed query string back into IPs, if underscores are found in /firewall parsing of strings. An advantage is that there is no vulnerability in this system.

    Second solution is to provide clients a proper functioning php script. In the API, one finds proper php codes after login. They contain dots from IPs. Due to this "DOT in URL" nothing works.

    Because OVH APIs provided those php codes, I thought that this problem of dots is taken care of. This is not the case. The script can login and fetch some data from the API path /me. But it does not do anything when an API call is made under php to /ip/{ip}. It gets stuck with dots in {ip} and throws an error with some explanation one takes time to understand .

    One of the best solution is to provide a DYNHost function integrated with /ip/{ip}/firewall that could constantly feed in the actual IP of subdomain under DYNHost to sequence 0 every day. A customer could choose under DYNHost if the latest IP should be inserted into /ip/{ip}/firewall/{ipOnFirewall}/rule/{0}. By doing so, all customers shall have their Routers IP automatically inserted into Rule 0 of all firewalls.

    In the absence of the above DYNHost function, all clients are required to undergo a torturous deleting and creating IP under Rule 0 for each firewall by making ten - 15 clicks. Had it been there, a customer could bind services to a specific IP, which could then bind and route to a customer's Router IP. With this system, a customer could have secure access to admin services at non-public and non-standard ports directly bound to his Router IP every day. This increases security and ease to use firewall as all admin services are accessible to a customer's Router IP.

    Thus, the suggestion is here not only to [Modify Api.php] but also create an extra API for DYNHost function.

    opened by ghost 4
  • I can't retrieve the ID of a task using the PHP API

    I can't retrieve the ID of a task using the PHP API

    Hi,

    Today i've started working with the OVH API to do a project to get finished my studies.

    I'm trying to create a subdomain using the mentioned API, and it works (it create the subdomain). But however I can't retrieve the returned data that contains the ID with the "post" function, when I return the value of the variable $task, I'm getting always a null object.

    To handle all the process i've build a custom class called OVHAPI, next i'll left the code that i've builded:

    <?php
    
    	require_once 'libs/php-ovh/vendor/autoload.php';
    
    	use \Ovh\Api;
    	use GuzzleHttp\Client;
    
    	class OVHAPI {
    
    	    private $application_key;
    		private $application_secret;
    		private $consumer_key;
    		private $ovh;
    		private $http_client;
    
    	    function __construct() {
    	    	require("ovh_conexion.php");
    
    	    	$this->http_client = new Client([
    				'timeout'         => 30,
    				'connect_timeout' => 5,
    			]);
    
    	    	$this->ovh = new Api($this->application_key,
                    $this->application_secret,
                    'ovh-eu',
                    $this->consumer_key,
                    $this->http_client
                );
    	    }
    
    	    function __destruct() {
    	        
    	    }
    
    	    function createSubdomain($sub_domain, $zone="cocohost.tk", $field_type="A", $target="149.56.108.120") {
    	    	$task = $this->ovh->post('/domain/zone/'.$zone.'/record', array(
    			    'fieldType' => $field_type,
    			    'subDomain' => $sub_domain,
    			    'target' => $target,
    			    'ttl' => 'NaN'
    			));
    
    			$this->ovh->post('/domain/zone/'.$zone.'/refresh');
    
    			return $task;
    	    }
    	}
    
    ?>
    
    opened by jmarcoslc 4
  • Remove a direct client call, use API `get` method.

    Remove a direct client call, use API `get` method.

    Remove the $this->http_client->get() call used in the calculateTimeDelta method.

    This call was too coupled to the Http client, using the same method for all the calls is always better.

    opened by shulard 4
  • Guzzle6 for v2.x branch

    Guzzle6 for v2.x branch

    Guzzle6 was not include into php wrapper because of changes in Exception after Guzzle6 release.

    Now, that's time to upgrade!

    Thanks to @ByScripts work on https://github.com/ovh/php-ovh/pull/17, we include Guzzle6 into our wrapper.

    opened by VincentCasse 4
  • Adding Github actions, codecov config, updating tests accordingly and re-organize README file

    Adding Github actions, codecov config, updating tests accordingly and re-organize README file

    Backported from https://github.com/carsso/php-ovhcloud

    This PR includes many things among :

    • Build is using GitHub actions for PHP versions 7.4, 8.0, 8.1 (old travis build config has been removed)
    • Code linting (inclued in build checks)
    • Updated and uniformized configuration files for tests, documentation and linter (everything can be executed easily through a composer command)
    • Updated functional tests (mainly to fix infinite test data persisted in OVHcloud account when tests are interrupted)
    • New README file organization

    Known limitation discovered in functional tests, not fixed but partially workarounded in GitHub actions config : functional tests cannot not be parallelized because they are changing a real OVHcloud account configuration while being executed.

    You will need to enable/setup codecov on this repo here https://app.codecov.io/gh/ovh/php-ovh You don't need to put the codecov token anywhere, codecov will bind directly using github api.

    You will also need to create a few secrets in your github actions config :

    • OVH_TESTS_APP_KEY
    • OVH_TESTS_APP_SECRET
    • OVH_TESTS_CONSUMER_KEY
    • OVH_TESTS_ENDPOINT

    To fill these secrets, generate an unlimited token from the OVHcloud API (I highly recommend to use an empty account dedicated to tests).

    Needed rights :

    [
      {
        method: "GET",
        path: "/*"
      },
      {
        method: "POST",
        path: "/me/accessRestriction/*"
      },
      {
        method: "PUT",
        path: "/me/accessRestriction/*"
      },
      {
        method: "DELETE",
        path: "/me/accessRestriction/*"
      }
    ]
    
    opened by carsso 0
  • Ignore invalid UTF-8 characters in response body

    Ignore invalid UTF-8 characters in response body

    When response body contains invalid UTF-8 characters, the script ignore them instead of throwing an error. This si usefull to manage call logs designation like "France Société française du radiotéléphone".

    triage/waiting-for-answer 
    opened by AntoineDrsl 1
  • Unable to generate documentation

    Unable to generate documentation

    Hi,

    The readme explain how to generate the document for this package here.

    I followed this step by step but I'm unable to find the phing file in the vendor directory.

    I am missing something ?

    Environment :

    • PHP 7.4.20 (cli)
    • Composer version 2.1.2
    • ovh/ovh v3.0.0
    opened by Tchanove 0
  • 400 Bad Request - INVALID_SIGNATURE

    400 Bad Request - INVALID_SIGNATURE

    Bonjour, J'utilise depuis longtemps l'API afin de faire différentes tâches, et mes tâches échouent depuis quelques jours. J'ai essayé de mettre à jour l'API, toujours la même erreur.

    Que voici : Fatal error: Uncaught exception 'GuzzleHttp\Exception\ClientException' with message 'Client error: POST https://eu.api.soyoustart.com/1.0/ip/127.0.0.1%2F29/reverse resulted in a 400 Bad Request response: {"errorCode":"INVALID_SIGNATURE","message":"Invalid signature","httpCode":"400 Bad Request"} ' in /var/www/vhosts/azertyuiop.fr/httpdocs/.composer/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php:113 Stack trace: #0 /var/www/vhosts/azertyuiop.fr/httpdocs/.composer/vendor/guzzlehttp/guzzle/src/Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response)) #1 /var/www/vhosts/azertyuiop.fr/httpdocs/.composer/vendor/guzzlehttp/promises/src/Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp{closure}(Object(GuzzleHttp\Psr7\Response)) #2 /var/www/vhosts/azertyuiop.fr/httpdocs/.composer/vendor/guzzlehttp/promises/src/Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array) #3 /var/www/vhosts/azertyuiop.fr/httpdocs in /var/www/vhosts/azertyuiop.fr/httpdocs/.composer/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php on line 113

    En attente d'une correction, Rapide, je l'espère... Merci à vous.

    bug 
    opened by FloriaanLry 3
Releases(v3.1.0)
Owner
OVHcloud
OVHcloud
Laravel Blog Package. Easiest way to add a blog to your Laravel website. A package which adds wordpress functionality to your website and is compatible with laravel 8.

Laravel Blog Have you worked with Wordpress? Developers call this package wordpress-like laravel blog. Give our package a Star to support us ⭐ ?? Inst

Binshops 279 Dec 28, 2022
Parsica - PHP Parser Combinators - The easiest way to build robust parsers.

Parsica The easiest way to build robust parsers in PHP. composer require parsica-php/parsica Documentation & API: parsica-php.github.io <?php $parser

null 350 Dec 27, 2022
The Easiest way to start using PHP CS Fixer and PHP_CodeSniffer with 0-knowledge

The Easiest Way to Use Any Coding Standard Features Blazing fast Parallel run Use PHP_CodeSniffer || PHP-CS-Fixer - anything you like 2nd run under fe

null 1.1k Jan 6, 2023
The easiest way to match data structures like JSON/PlainText/XML against readable patterns. Sandbox:

PHP Matcher Library created for testing all kinds of JSON/XML/TXT/Scalar values against patterns. API: PHPMatcher::match($value = '{"foo": "bar"}', $p

Coduo 774 Dec 31, 2022
The easiest way to get started with event sourcing in Laravel

Event sourcing for Artisans ?? This package aims to be the entry point to get started with event sourcing in Laravel. It can help you with setting up

Spatie 591 Jan 4, 2023
Standardized wrapper for popular currency rate APIs. Currently supports FixerIO, CurrencyLayer, Open Exchange Rates and Exchange Rates API.

?? Wrapper for popular Currency Exchange Rate APIs A PHP API Wrapper to offer a unified programming interface for popular Currency Rate APIs. Dont wor

Alexander Graf 24 Nov 21, 2022
MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query and get result in a fastest way

Mysql Optimizer mysql optimizer also known as MOP is a php query handling and manipulation library providing easy and reliable way to manipulate query

null 2 Nov 20, 2021
LunarBB is a simple to use, lightweight and accessible Bulletin Board System developed in PHP

LunarBB - Simple Bulletin Board System LunarBB is a simple to use, lightweight and accessible Bulletin Board System developed in PHP. This Webapplicat

Webcodingcafe 2 Feb 7, 2022
My intention with this app is that new developers can have a concrete application with Laravel + VueJS where they can use it as example to learn the right way

My intention with this app is that new developers can have a concrete application with Laravel + VueJS where they can use it as example to learn the right way, implementing the best practices possible and at the same time learn how TDD is done. So this will be an example application but completely usable for any similar case.

Eng Hasan Hajjar 2 Sep 30, 2022
Secure the data of your sites by encrypting them. They will be decrypted only in your applications

PHP Crypter Secure the data of your sites by encrypting them. They will be decrypted only in your applications How to use ? You just have to include t

Claude Fassinou 7 Nov 26, 2022
Test and enforce architectural rules in your Laravel applications. Keep your app's architecture clean and consistent!

Laravel Arkitect Laravel Arkitect lets you test and enforce your architectural rules in your Laravel applications, and it's a PHPArkitect wrapper for

SMorteza Ebadi 55 Dec 17, 2022
A Laravel Wrapper for the Binance API. Now easily connect and consume the Binance Public & Private API in your Laravel apps without any hassle.

This package provides a Laravel Wrapper for the Binance API and allows you to easily communicate with it. Important Note This package is in early deve

Moinuddin S. Khaja 7 Dec 7, 2022
An un-offical API wrapper for logsnag.com to get notifications and track your project events

An un-offical API wrapper for logsnag.com to get notifications and track your project events

David Oti 3 Oct 15, 2022
The simplest way to create a dynamic sitemap for your self-coded website which you have made by using PHP/HTML/CSS/Js etc... Scripts.

Sitemap_index.xml The simplest way to create a dynamic sitemap for your self-coded website which you have made by using PHP/HTML/CSS/Js etc... Scripts

Tanish Raj 1 Oct 16, 2021
Task for GrumPHP that adds CSS linting support with stylelint. An easy way to enforce convention and avoid errors in your styles

grumphp-stylelint-task Installation Stylelint is a static analysis tool for styles. A mighty, modern linter that helps you avoid errors and enforce co

null 3 Apr 29, 2021
📦 An easy way to share the data from your backend to the JavaScript.

Laravel Shared Data ✨ Introduction Laravel Shared Data provides an easy way to share the data from your backend to the JavaScript. ?? Quick start Inst

Coderello 326 Nov 30, 2022
Secure package for WP CLI, built to provide an easier way of securing your WordPress installation

wp-cli/secure-command Official website: Hackthewp.com Manages common security aspects of WordPress. Supports nginx and Apache. Basic Usage This packag

Igor Hrcek 68 Dec 27, 2022
Samsui is a factory library for building PHP objects useful for setting up test data in your applications.

#Samsui Samsui is a factory library for building PHP objects useful for setting up test data in your applications. It is mainly inspired by Rosie for

Sam Yong 31 Nov 11, 2020
The Cache component provides an extended PSR-6 implementation for adding cache to your applications.

Symfony PSR-6 implementation for caching The Cache component provides an extended PSR-6 implementation for adding cache to your applications. It is de

Symfony 3.8k Jan 3, 2023