1
0
mirror of https://github.com/php/doc-fr.git synced 2026-03-24 07:02:06 +01:00
Files
archived-doc-fr/reference/gearman/examples.xml
Louis-Arnaud 2d314f78aa CI: check-style + nettoyage TRADUCTIONS.txt (#2545)
* CI: add French style checker based on TRADUCTIONS.txt

Checks changed XML files in PRs for:
- Direct address forms (vous/votre/vos) → warnings
- French grammar errors (etc..., comme par exemple, si il) → errors
- Incorrect terminology (librairie, chiffrage, encryption) → warnings

Inspired by doc-ja's textlint+prh approach but simpler:
runs directly on XML sources, no PhD render needed.

Only errors (grammar/spelling) fail the CI.
Style warnings appear as PR annotations without blocking.

* test: introduce style errors to validate CI check

* Revert "test: introduce style errors to validate CI check"

This reverts commit 7c1d523c6bbef116f54fc6dad7b61a45ee4f7ddd.

* Corriger toutes les violations de style TRADUCTIONS.txt

- 174x "Notez que" → "Il est à noter que"
- 50x "depuis PHP X" → "à partir de PHP X"
- 50x "votre" → le/la/du
- 15x "si il" → "s'il"
- 14x "Vous pouvez" → "Il est possible de"
- 14x "encryption" (faux positifs entity refs exclus)
- 12x "assurez-vous" → "il faut s'assurer"
- 12x "Vous devez" → "Il faut"
- 11x "vos" → les/des
- 9x "comme par exemple" → "par exemple"
- 6x "Vous devriez" → "Il est recommandé de"
- 2x "optionel" → "optionnel"
- 2x "reportez-vous" → "se reporter"

Toutes les règles passent désormais en erreur dans la CI.

* Harmoniser les noms de workflows GitHub Actions

- integrate.yaml → build.yml (extension + nom cohérent)
- check-style-fr.yml → check-style.yml ("-fr" redondant)
- Aligner les noms de workflow et job

* Lire les règles dynamiquement depuis TRADUCTIONS.txt

Le script parse TRADUCTIONS.txt au démarrage et génère les règles
de vérification automatiquement. Plus aucune règle en dur.

* Règles dynamiques depuis TRADUCTIONS.txt

Le script CI lit les lignes INTERDIT de TRADUCTIONS.txt pour générer
les règles de vérification. Plus aucune règle en dur dans le script.
Corrige les 27 violations restantes (Depuis PHP → À partir de PHP).

* Corriger les trailing whitespace
2026-02-25 13:13:51 +01:00

472 lines
11 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: cf0a919c126e45b5df583d188e77fa62015b714a Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="gearman.examples">
&reftitle.examples;
<section xml:id="gearman.examples-reverse">
<title>Utilisation simple</title>
<example>
<title>Client et agent Gearman simple</title>
<simpara>
Cet exemple montre un client et un agent simple. Le client
envoie une &string; au serveur de travaux, et l'agent inverse
la &string; et la retourne. Le travail est exécuté de façon synchronisée.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
# Crée un nouveau client.
$gmclient= new GearmanClient();
# Ajoute un serveur par défaut (localhost).
$gmclient->addServer();
echo "Envoi de la tâche\n";
# Envoi de la tâche inverse
do
{
$result = $gmclient->doNormal("reverse", "Hello!");
# Vérification des différents paquets de retour et des erreurs.
switch($gmclient->returnCode())
{
case GEARMAN_WORK_DATA:
echo "Data: $result\n";
break;
case GEARMAN_WORK_STATUS:
list($numerator, $denominator)= $gmclient->doStatus();
echo "Status: $numerator/$denominator complete\n";
break;
case GEARMAN_WORK_FAIL:
echo "Failed\n";
exit;
case GEARMAN_SUCCESS:
echo "Success: $result\n";
break;
default:
echo "RET: " . $gmclient->returnCode() . "\n";
exit;
}
}
while($gmclient->returnCode() != GEARMAN_SUCCESS);
?>
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?php
echo "Starting\n";
# Crée un nouvel agent.
$gmworker= new GearmanWorker();
# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();
# Enregistre la fonction "reverse" avec le serveur. Modifie la fonction
# de l'agent en "reverse_fn_fast" pour en améliorer la rapidité avec aucun affichage.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# Cette boucle n'est pas nécessaire, mais montre simplement le fonctionnement
for ($x= 0; $x < $workload_size; $x++)
{
echo "Sending status: " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x, $workload_size);
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# On retourne ce que l'on veut au client.
return $result;
}
# Une version plus simple et moins verbeuse de la fonction ci-dessus pourrait être :
function reverse_fn_fast($job)
{
return strrev($job->workload());
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
% php reverse_worker.php
Starting
Waiting for job...
Received job: H:foo.local:36
Workload: Hello! (6)
Sending status: 1/6 complete
Sending status: 2/6 complete
Sending status: 3/6 complete
Sending status: 4/6 complete
Sending status: 5/6 complete
Sending status: 6/6 complete
Result: !olleH
]]>
</screen>
<screen>
<![CDATA[
% php reverse_client.php
Starting
Sending job
Status: 1/6 complete
Status: 2/6 complete
Status: 3/6 complete
Status: 4/6 complete
Status: 5/6 complete
Status: 6/6 complete
Success: !olleH
]]>
</screen>
</example>
</section>
<section xml:id="gearman.examples-reverse-bg">
<title>Client et agent Gearman simple, en arrière-plan</title>
<example>
<title>Client et agent Gearman simple, en arrière-plan</title>
<simpara>
Cet exemple montre un client et un agent simple. Le client envoie une &string;
au serveur de travaux en tant que travail d'arrière-plan, et l'agent
renverse la &string;. Il est à noter que vu l'exécution asynchrone de l'agent, le
client n'attend pas la fin et qu'il sort (y compris lorsqu'il ne
reçoit pas les résultats).
</simpara>
<programlisting role="php">
<![CDATA[
<?php
# Crée un objet client
$gmclient= new GearmanClient();
# Ajoute un serveur par défaut (localhost)
$gmclient->addServer();
# Exécute le client en arrière-plan
$job_handle = $gmclient->doBackground("reverse", "this is a test");
if ($gmclient->returnCode() != GEARMAN_SUCCESS)
{
echo "bad return code\n";
exit;
}
echo "done!\n";
?>
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?php
echo "Starting\n";
# Crée un nouvel agent
$gmworker= new GearmanWorker();
# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();
# Enregistre la fonction "reverse" sur le serveur. Modifie la fonction de l'agent en
# "reverse_fn_fast" pour une exécution plus rapide sans affichage.
$gmworker->addFunction("reverse", "reverse_fn");
print "Attente d'un travail...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# Cette boucle n'est pas nécessaire, mais nous l'utilisons pour en comprendre le fonctionnement
for ($x= 0; $x < $workload_size; $x++)
{
echo "Sending status: " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x, $workload_size);
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# Retourne ce que l'on veut au client.
return $result;
}
# Une version plus simple et moins verbeuse de la fonction ci-dessus serait :
function reverse_fn_fast($job)
{
return strrev($job->workload());
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
% php reverse_worker.php
Starting
Waiting for job...
Received job: H:foo.local:41
Workload: this is a test (14)
1/14 complete
2/14 complete
3/14 complete
4/14 complete
5/14 complete
6/14 complete
7/14 complete
8/14 complete
9/14 complete
10/14 complete
11/14 complete
12/14 complete
13/14 complete
14/14 complete
Result: tset a si siht
]]>
</screen>
<screen>
<![CDATA[
% php reverse_client_bg.php
done!
]]>
</screen>
</example>
</section>
<section xml:id="gearman.examples-reverse-task">
<title>Client et agent Gearman simple, avec la soumission de tâches</title>
<example>
<title>Client et agent Gearman simple, avec la soumission de tâches</title>
<simpara>
Dans cet exemple, le client "reverse" a été étendu pour exécuter 2 tâches en parallèle.
L'agent "reverse" est inchangé, mis à part qu'il retourne des données durant le processus.
</simpara>
<programlisting role="php">
<![CDATA[
<?php
# Crée le client gearman
$gmc= new GearmanClient();
# Ajoute le serveur par défaut (localhost)
$gmc->addServer();
# Enregistre quelques fonctions de rappel
$gmc->setCreatedCallback("reverse_created");
$gmc->setDataCallback("reverse_data");
$gmc->setStatusCallback("reverse_status");
$gmc->setCompleteCallback("reverse_complete");
$gmc->setFailCallback("reverse_fail");
# Définit quelques données applicatives arbitraires
$data['foo'] = 'bar';
# Ajoute deux tâches
$task= $gmc->addTask("reverse", "foo", $data);
$task2= $gmc->addTaskLow("reverse", "bar", NULL);
# Exécute les tâches en parallèle (en supposant plusieurs agents)
if (! $gmc->runTasks())
{
echo "ERROR " . $gmc->error() . "\n";
exit;
}
echo "DONE\n";
function reverse_created($task)
{
echo "CREATED: " . $task->jobHandle() . "\n";
}
function reverse_status($task)
{
echo "STATUS: " . $task->jobHandle() . " - " . $task->taskNumerator() .
"/" . $task->taskDenominator() . "\n";
}
function reverse_complete($task)
{
echo "COMPLETE: " . $task->jobHandle() . ", " . $task->data() . "\n";
}
function reverse_fail($task)
{
echo "FAILED: " . $task->jobHandle() . "\n";
}
function reverse_data($task)
{
echo "DATA: " . $task->data() . "\n";
}
?>
]]>
</programlisting>
<programlisting role="php">
<![CDATA[
<?php
echo "Starting\n";
# Crée un nouvel agent.
$gmworker= new GearmanWorker();
# Ajoute un serveur par défaut (localhost).
$gmworker->addServer();
# Enregistre la fonction "reverse" avec le serveur. Modifie la fonction de l'agent en
# "reverse_fn_fast" pour être plus rapide sans affichage.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
echo "Received job: " . $job->handle() . "\n";
$workload = $job->workload();
$workload_size = $job->workloadSize();
echo "Workload: $workload ($workload_size)\n";
# Cette boucle n'est pas nécessaire, mais nous l'utilisons pour en comprendre le fonctionnement
for ($x= 0; $x < $workload_size; $x++)
{
echo "Sending status: " . ($x + 1) . "/$workload_size complete\n";
$job->sendStatus($x+1, $workload_size);
$job->sendData(substr($workload, $x, 1));
sleep(1);
}
$result= strrev($workload);
echo "Result: $result\n";
# Retourne ce que l'on veut au client.
return $result;
}
# Une version plus simple et moins verbeuse de la fonction ci-dessus serait :
function reverse_fn_fast($job)
{
return strrev($job->workload());
}
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
% php reverse_worker.php
Starting
Waiting for job...
Received job: H:foo.local:45
Workload: foo (3)
1/3 complete
2/3 complete
3/3 complete
Result: oof
Received job: H:foo.local:44
Workload: bar (3)
1/3 complete
2/3 complete
3/3 complete
Result: rab
]]>
</screen>
<screen>
<![CDATA[
% php reverse_client_task.php
CREATED: H:foo.local:44
CREATED: H:foo.local:45
STATUS: H:foo.local:45 - 1/3
DATA: f
STATUS: H:foo.local:45 - 2/3
DATA: o
STATUS: H:foo.local:45 - 3/3
DATA: o
COMPLETE: H:foo.local:45, oof
STATUS: H:foo.local:44 - 1/3
DATA: b
STATUS: H:foo.local:44 - 2/3
DATA: a
STATUS: H:foo.local:44 - 3/3
DATA: r
COMPLETE: H:foo.local:44, rab
DONE
]]>
</screen>
</example>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->