Domanda

Ho il seguente codice di lavoro:

$test = '123456';

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

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

Tuttavia quando io eseguilo su codepad Ricevo l'errore:

Avvertenza: preg_match (): interno pcre_fullinfo () errore -3 sulla riga 5

Ma il codice è in esecuzione sulla mia macchina (e il codice dovrebbe andare bene IMHO).

Devo distribuire il mio codice in futuro, quindi sarebbe male se si rompesse a seconda di una configurazione. Allora qual è il motivo per cui CodePad si rompe?

È stato utile?

Soluzione

Il codice eseguito tramite CODEPAD è in esecuzione in un ambiente molto limitato:

L'esecuzione del codice è gestita da un supervisore basato su Geordi. La strategia è di Esegui tutto sotto PTRACE, con molte chiamate di sistema vietate o ignorate. I compilatori e gli eseguibili finali sono entrambi eseguiti in una prigione di Chroot, con rigorosi limiti di risorse. Il supervisore è scritto in Haskell.

Anche se non ti aspetteresti di rompere un motore Regex, è molto probabile che la libreria PCRE usi qualcosa di internamente bloccato dall'ambiente CODEPAD. Nessun sistema di produzione utilizza restrizioni così gravi, quindi dovresti essere sicuro utilizzare quel codice nell'applicazione.

Il codice di errore sta per "pcre_error_badoption - il valore di che cosa non era valido ". Tuttavia, il codice nella sorgente PHP in cui si verifica l'errore rc = pcre_fullinfo(pce->re, extra, PCRE_INFO_CAPTURECOUNT, &num_subpats); che usa una costante per che cosa. Quindi significa chiaramente che la libreria PCRE è rotta su CODEPAD.

Se si desidera essere completamente al sicuro, potresti scrivere un piccolo programma C usando libpcre per chiamare quella funzione sullo stesso regex.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top