Ce guide explique comment contribuer au cœur de PHP en corrigeant les bogues. Nous nous concentrerons sur le flux de travail, en supposant une compréhension de base des versioning de C et PHP. De nouvelles soumissions de fonctionnalités sont en dehors du cadre de cet article.
Concepts clés:
- Le cycle de vie de la version de PHP: Les versions PHP mineures sont publiées chaque année, avec 3 ans de soutien (2 ans de soutien actif, 1 an de support uniquement sur la sécurité). Comprendre cela est crucial pour cibler les corrections de bogues.
- Fixation de bogues Fix de travail: Correction doit cibler la version affectée prise en charge prise en charge. Les développeurs PHP Core fusionnent ensuite le correctif vers le haut vers des versions plus récentes.
- Le processus de fixation du bogue: Cela implique: valider le bogue, reproduction locale, créer un test, déboguer, coder le correctif, commettre des modifications et soumettre une demande de traction (pr).
Résolution d'un bug: un exemple étape par étape
Corrigeons le bug # 71635 (un segfault dans DatePeriod::getEndDate()
quand aucune date de fin n'est définie).
- Validation: Vérifiez rapidement si le bogue est reproductible à l'aide de 3V4L (un code de test d'outil sur plusieurs versions PHP). Cela aide à identifier les versions affectées.
- Reproduction locale: Fork
php/php-src
, cloner et mettre à jour les dernières versions. Découvrez la branche la plus faible affectée, activement prise en charge (par exemple, php-5.6
dans ce cas). >
git checkout -b fix-dateperiod-segfault upstream/php-5.6
Copier après la connexion
- Créer et reproduire: Créer PHP et exécuter un script (par exemple,
segfault.php
) Reproduire le segfault:
<?php
$period = new DatePeriod(new DateTimeImmutable("now"), new DateInterval("P2Y4DT6H8M"), 2);
var_dump($period->getEndDate());
?>
Copier après la connexion
sapi/cli/php -n segfault.php
Copier après la connexion
- Créer un test: Créer un fichier de test
bug71635.phpt
(dans ext/date/tests/
) pour automatiser la vérification des bogues:
--TEST--
Bug #71635 (segfault in DatePeriod::getEndDate() when no end date has been set)
--FILE--
<?php date_default_timezone_set('UTC');
$period = new DatePeriod(new DateTimeImmutable("now"), new DateInterval("P2Y4DT6H8M"), 2);
var_dump($period->getEndDate());
?>
--EXPECT--
NULL
Copier après la connexion
Exécutez le test: make test TESTS=ext/date/tests/bug71635.phpt
- Débogage: Utilisez un débogueur (LLDB ou GDB) pour identifier la cause profonde. Le retour de retour identifiera le code problématique.
-
CODEZ LA DIXE: Modifiez le code pour gérer le pointeur nul. Par exemple, ajoutez un chèque avant la déréférence dpobj->end
.
-
Tester et engager: re-run le test (make test
). Une fois réussi, commettez les changements.
-
Soumettre un pr: Soumettre une demande de traction contre la branche appropriée de php/php-src
.
Conclusion:
La correction des bogues PHP Core est une contribution précieuse ne nécessitant que des connaissances de base C. Il offre une expérience de programmation pratique et aide à améliorer le PHP. Avec des milliers de rapports de bogues ouverts, il existe de nombreuses opportunités de s'impliquer.
Questions fréquemment posées (FAQ): (celles-ci sont résumées pour la concision)
- Débutage: Configurer un environnement de développement PHP, cloner le code source, compiler, tester et apprendre les internes PHP.
- Bogues de rapport: Utilisez le système de suivi des bogues PHP, en fournissant des descriptions détaillées et des cas de test.
- Débogage: Utilisez XDebug ou d'autres outils de débogage.
- bogues communs: Erreurs de syntaxe, de logique et d'exécution; les empêcher par du code propre et des tests approfondis.
- Contributions non codantes: Signaler des bogues, écrire / traduire la documentation, aider avec le site Web, participer à la communauté.
- Tests: Utilisez le phpunit pour les tests unitaires et écrivez du code testable.
- Liste de diffusion des internes PHP: Abonnez-vous et participez aux discussions.
- Rester à jour: Utilisez le site Web PHP, les médias sociaux, les newsletters et les communautés.
- meilleures pratiques: noms significatifs, commentaires, style cohérent, éviter les globaux, manipulation des erreurs, désinfection des entrées.
- Améliorer les compétences: Pratique, projets, défis, contributions open source, livres, cours, conférences.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!