basti_p: Timeout bei preg_match

Beitrag lesen

Hallo,

bei einem Bekannten streikt der Onlineshop, genauer gesagt, die Benutzerregistrierung- und anmeldung.

Ich habe das Problem auf den Swiftmailer eingrenzen können; dieser wirft nach dem Versuch, die Mailadresse nach RFC 2822 zu validieren, einen Timeout-Error (Fatal error:  Maximum execution time of 30 seconds exceeded in ...).

Die betroffenen Zeile:

if (!preg_match('/^'.$this->getGrammar()->getDefinition('addr-spec').'$/D',   $address)) {...}

Der regex ist knapp 3000 Zeichen lang und sieht so aus:

/^(?:(?:(?:(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?(?:[a-zA-Z0-9!#$%&'*+-/=?^\{\}\|~]+(\.[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_{}|~]+))+(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?"((?:(?:[ \t](?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21\x23-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])))(?:(?:[ \t](?:\r\n))?[ \t])?"(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?))@(?:(?:(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?(?:[a-zA-Z0-9!#$%&'*+-/=?^\{\}\|~]+(\.[a-zA-Z0-9!#\$%&'\*\+\-\/=\?\^_{}|~]+))+(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?)|(?:(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?[((?:(?:[ \t](?:\r\n))?[ \t])?(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x5A\x5E-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])))?(?:(?:[ \t](?:\r\n))?[ \t])?](?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))(?:(?:(?:(?:[ \t](?:\r\n))?[ \t])?(((?:(?:(?:[ \t](?:\r\n))?[ \t])|(?:(?:[\x01-\x08\x0B\x0C\x0E-\x19\x7F]|[\x21-\x27\x2A-\x5B\x5D-\x7E])|(?:\[\x00-\x08\x0B\x0C\x0E-\x7F])|(?1)))(?:(?:[ \t](?:\r\n))?[ \t])?)))|(?:(?:[ \t](?:\r\n))?[ \t])))?)))$/D

Kann es sein, dass der preg_match-Vergleich über 30 Sekunden dauert=

Vielen Dank, Grüße Basti