Aller au contenu principal

Client API Playground

L'objet PlaygroundClient implémente l'interface UniversalPHP. Toutes les méthodes de cette interface sont également disponibles dans Node.js et les instances PHP du même processus (Playground exécute PHP dans un web worker).

De manière générale, vous pouvez utiliser le client pour effectuer trois types d'opérations :

  • Exécuter du code PHP
  • Personnaliser PHP.ini
  • Gérer les fichiers et dossiers

Exécuter du code PHP

Les deux méthodes que vous pouvez utiliser pour exécuter du code PHP sont :

  • run() - exécute du code PHP et renvoie la résultat
  • request() - effectue une requête HTTP au site web

Dans Node.js, vous pouvez également utiliser la méthode cli() pour exécuter PHP en mode CLI.

La méthode run()

La méthode request()

Serves the request – either by serving a static file, or by dispatching it to the PHP runtime.

The request() method mode behaves like a web server and only works if the PHP was initialized with a requestHandler option (which the online version of WordPress Playground does by default).

In the request mode, you pass an object containing the request information (method, headers, body, etc.) and the path to the PHP file to run:

const php = PHP.load('7.4', {
requestHandler: {
documentRoot: "/www"
}
})
php.writeFile("/www/index.php", `<?php echo file_get_contents("php://input");`);
const result = await php.request({
method: "GET",
headers: {
"Content-Type": "text/plain"
},
body: "Hello world!",
path: "/www/index.php"
});
// result.text === "Hello world!"

The request() method cannot be used in conjunction with cli().

Personnaliser PHP.ini

Le client API vous permet également de modifier le fichier php.ini :

await setPhpIniEntries(client, {
display_errors: 'On',
error_reporting: 'E_ALL',
});

Gérer les fichiers et dossiers

L'objet client vous fournit une API de bas niveau pour gérer les fichiers et dossiers dans le système de fichiers PHP :

await client.mkdirTree('/wordpress/test');
// Create a new PHP file
await client.writeFile(
'/wordpress/test/index.php',
`<?php
echo "Hello, world!<br/>";
// List all the files in current directory
print_r(glob(__DIR__ . '/*'));
`
);
// Create files named 1, 2, and 3
await client.writeFile('/wordpress/test/1', '');
await client.writeFile('/wordpress/test/2', '');
await client.writeFile('/wordpress/test/3', '');
// Remove the file named 1
await client.unlink('/wordpress/test/1');
// Navigate to our PHP file
await client.goTo('/test/index.php');

Pour une liste complète de ces méthodes, consultez l'interface PlaygroundClient.

Envoyer des messages à JavaScript

Vous pouvez transmettre des messages de PHP à JavaScript en utilisant la fonction post_message_to_js(). Elle accepte un argument :

  • $data (string) – Données à transmettre à JavaScript.

Par exemple, voici comment envoyer un message avec un ID de publication et un titre encodés en JSON :

import { PHP } from '@php-wasm/universal';
import { loadNodeRuntime } from '@php-wasm/node';

const php = new PHP(await loadNodeRuntime('8.3'));

php.onMessage(
// The data is always passed as a string
function (data: string) {
// Let's decode and log the data:
console.log(JSON.parse(data));
}
);

// Now that we have a listener in place, let's
// dispatch a message:
await php.runStream({
code: `<?php
post_message_to_js(
json_encode([
'post_id' => '15',
'post_title' => 'This is a blog post!'
])
);
`,
});

// You will see the following output in the console:
// { post_id: '15', post_title: 'This is a blog post!' }

La méthode cli()

Dans Node.js, vous avez également accès à la méthode cli() qui exécute PHP en mode CLI :

// Run PHP in a CLI mode
client.cli(['-r', 'echo "Hello, world!";']);
// Outputs "Hello, world!"

Une fois que la méthode cli() a terminé son exécution, l'instance PHP n'est plus utilisable et doit être supprimée. Cela est dû au fait que PHP nettoie en interne toutes les ressources et appelle exit().