Cliente da API do Playground
O objeto PlaygroundClient
implementa a interface UniversalPHP
. Todos os métodos dessa interface também estão disponíveis em Node.js e em instâncias PHP no mesmo processo (o Playground executa o PHP em um web worker).
De modo geral, você pode usar o cliente para realizar três tipos de operações:
- Executar código PHP
- Personalizar o
PHP.ini
- Gerenciar arquivos e diretórios
Executando código PHP
Os dois métodos que você pode usar para executar código PHP são:
No Node.js, você também pode usar o método cli()
para executar o PHP no modo CLI.
O método run()
O método 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()
.
Personalizando o PHP.ini
O cliente da API também permite alterar o arquivo php.ini
:
await setPhpIniEntries(client, {
display_errors: 'On',
error_reporting: 'E_ALL',
});
Gerenciando arquivos e diretórios
O objeto client
oferece uma API de baixo nível para gerenciar arquivos e diretórios no sistema de arquivos do PHP:
await client.mkdirTree('/wordpress/test');
// Cria um novo arquivo PHP
await client.writeFile(
'/wordpress/test/index.php',
`<?php
echo "Hello, world!<br/>";
// Lista todos os arquivos no diretório atual
print_r(glob(__DIR__ . '/*'));
`
);
// Cria arquivos chamados 1, 2 e 3
await client.writeFile('/wordpress/test/1', '');
await client.writeFile('/wordpress/test/2', '');
await client.writeFile('/wordpress/test/3', '');
// Remove o arquivo chamado 1
await client.unlink('/wordpress/test/1');
// Navega até nosso arquivo PHP
await client.goTo('/test/index.php');
Para uma lista completa desses métodos, consulte a interface PlaygroundClient
.
Enviando mensagens para o JavaScript
Você pode enviar mensagens do PHP para o JavaScript usando a função post_message_to_js()
. Ela aceita um argumento:
$data
(string) – Dados a serem enviados para o JavaScript.
Por exemplo, veja como enviar uma mensagem com um ID e título de post codificados em JSON:
const php = await PHP.load('8.0');
php.onMessage(
// Os dados são sempre passados como string
function (data: string) {
// Vamos decodificar e exibir os dados:
console.log(JSON.parse(data));
}
);
// Agora que temos um listener, vamos
enviar uma mensagem:
await php.run({
code: `<?php
post_message_to_js(
json_encode([
'post_id' => '15',
'post_title' => 'This is a blog post!'
])
);
`,
});
// Você verá a seguinte saída no console:
// { post_id: '15', post_title: 'This is a blog post!' }
O método cli()
No Node.js, você também tem acesso ao método cli()
, que executa o PHP no modo CLI:
// Executa o PHP no modo CLI
client.cli(['-r', 'echo "Hello, world!";']);
// Exibe "Hello, world!"
Depois que o método cli()
termina de rodar, a instância do PHP não pode mais ser usada e deve ser descartada. Isso ocorre porque o PHP limpa todos os recursos internamente e chama exit()
.