Question

J'ai le code de travail suivant:

$test = '123456';

$int = preg_match('/^\d+$/', $test, $matches);

print_r(array($int, $matches));

Cependant, quand je exécuter sur CodePad je reçois l'erreur:

Warning: preg_match (): erreur pcre_fullinfo interne () -3 sur la ligne 5

Mais le code est en cours d'exécution sur ma propre machine (et le code doit être bien à mon humble avis).

Je dois distribuer mon code dans l'avenir il serait mauvais si elle romprait selon une configuration. Alors, quelle est la raison pour laquelle les pauses CodePad sur elle?

Était-ce utile?

La solution

code exécuté par CodePad est en cours d'exécution dans un environnement très restreint:

Code de l'exécution est assurée par un superviseur basé sur Geordi. La stratégie consiste à exécuter tout sous ptrace, avec de nombreux appels système rejeté ou ignoré d'. Et Compilateurs executables sont tous deux exécutés finaux dans une prison chroot, avec des limites de ressources strictes. Le superviseur est écrit en Haskell.

Alors il n'y a rien que vous attendez de casser un moteur de regex il est très possible que la bibliothèque PCRE utilise quelque chose en interne qui est bloqué par l'environnement CodePad. Aucun système de production utilise de telles restrictions sévères de sorte que vous devriez être sûr d'utiliser ce code dans votre application.

Le code d'erreur signifie "PCRE_ERROR_BADOPTION - la valeur de ce était invalide". Cependant, le code dans la source de PHP où l'erreur se produit est rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); qui utilise une constante pour ce . Donc, clairement signifie que la bibliothèque PCRE est cassé sur CodePad.

Si vous voulez être complètement sûr, vous pouvez écrire un petit programme C en utilisant libpcre d'appeler cette fonction sur la même regex.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top