mirror of
https://github.com/php/doc-fr.git
synced 2026-04-30 02:03:15 +02:00
2d314f78aa
* 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
167 lines
5.0 KiB
XML
167 lines
5.0 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- EN-Revision: 8859c8b96cd9e80652813f7bcf561432a5e9f934 Maintainer: jpauli Status: ready -->
|
|
<!-- Reviewed: no -->
|
|
<reference xml:id="class.sessionhandlerinterface" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
|
|
<title>L'interface SessionHandlerInterface</title>
|
|
<titleabbrev>SessionHandlerInterface</titleabbrev>
|
|
|
|
<partintro>
|
|
|
|
<!-- {{{ SessionHandlerInterface intro -->
|
|
<section xml:id="sessionhandlerinterface.intro">
|
|
&reftitle.intro;
|
|
<para>
|
|
<classname>SessionHandlerInterface</classname> est une interface
|
|
qui définit un prototype minimal pour la création d'un gestionnaire
|
|
de session personnalisé. Afin de passer un gestionnaire
|
|
de session personnalisé à la fonction <function>session_set_save_handler</function>
|
|
en utilisant son invocation <abbrev>OOP</abbrev>, la classe peut implémenter
|
|
cette interface.
|
|
</para>
|
|
<para>
|
|
Il est à noter que ces méthodes sont destinées à être appelées de manière interne par PHP, et non
|
|
depuis l'espace utilisateur.
|
|
</para>
|
|
</section>
|
|
<!-- }}} -->
|
|
|
|
<section xml:id="sessionhandlerinterface.synopsis">
|
|
&reftitle.interfacesynopsis;
|
|
|
|
<!-- {{{ Synopsis -->
|
|
<classsynopsis class="interface">
|
|
<oointerface>
|
|
<interfacename>SessionHandlerInterface</interfacename>
|
|
</oointerface>
|
|
|
|
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
|
|
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.sessionhandlerinterface')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='SessionHandlerInterface'])">
|
|
<xi:fallback/>
|
|
</xi:include>
|
|
</classsynopsis>
|
|
<!-- }}} -->
|
|
|
|
</section>
|
|
|
|
<section xml:id="sessionhandlerinterface.examples">
|
|
&reftitle.examples;
|
|
<example>
|
|
<title>
|
|
Exemple avec <classname>SessionHandlerInterface</classname>
|
|
</title>
|
|
<para>
|
|
L'exemple qui suit propose un gestionnaire de stockage de sessions basé sur des fichiers,
|
|
basiquement comme les sessions PHP fonctionnent en interne de manière native, avec le
|
|
gestionnaire embarqué <parameter>files</parameter>. Cet exemple pourrait être transformé
|
|
facilement pour utiliser une base de données.
|
|
</para>
|
|
<para>
|
|
Nous utilisons le style orienté objet avec <function>session_set_save_handler</function> et
|
|
nous enregistrons la fonction de fermeture grâce au paramètre de la fonction. C'est en général
|
|
conseillé lorsque le gestionnaire de session est basé sur des objets.
|
|
</para>
|
|
<caution>
|
|
<para>
|
|
Pour plus de brièveté, cet exemple omet la validation d'entrée. Toutefois,
|
|
les paramètres <literal>$id</literal> sont en fait des valeurs fournies
|
|
par l'utilisateur qui nécessitent une validation/assainissement appropriée
|
|
pour éviter les vulnérabilités, telles que les problèmes de parcours de
|
|
chemin. <emphasis>N'utilisez donc pas cet exemple sans modification dans
|
|
les environnements de production.</emphasis>
|
|
|
|
</para>
|
|
</caution>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
class MySessionHandler implements SessionHandlerInterface
|
|
{
|
|
private $savePath;
|
|
|
|
public function open($savePath, $sessionName): bool
|
|
{
|
|
$this->savePath = $savePath;
|
|
if (!is_dir($this->savePath)) {
|
|
mkdir($this->savePath, 0777);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
public function close(): bool
|
|
{
|
|
return true;
|
|
}
|
|
|
|
#[\ReturnTypeWillChange]
|
|
public function read($id)
|
|
{
|
|
return (string) @file_get_contents("$this->savePath/sess_$id");
|
|
}
|
|
|
|
public function write($id, $data): bool
|
|
{
|
|
return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
|
|
}
|
|
|
|
public function destroy($id): bool
|
|
{
|
|
$file = "$this->savePath/sess_$id";
|
|
if (file_exists($file)) {
|
|
unlink($file);
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
#[\ReturnTypeWillChange]
|
|
public function gc($maxlifetime)
|
|
{
|
|
foreach (glob("$this->savePath/sess_*") as $file) {
|
|
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
|
|
unlink($file);
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
$handler = new MySessionHandler();
|
|
session_set_save_handler($handler, true);
|
|
session_start();
|
|
|
|
// enregistre/récupère des données avec $_SESSION
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
|
|
</partintro>
|
|
|
|
&reference.session.entities.sessionhandlerinterface;
|
|
|
|
</reference>
|
|
|
|
<!-- 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
|
|
-->
|