Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Je trouve que c'est trop simple !

42 views
Skip to first unread message

Otomatic

unread,
Jan 4, 2020, 9:11:30 AM1/4/20
to
Bonjour,

diapublié sur fr.comp.infosystemes.www.serveurs car, à la base, c'est
pour traiter le non démarrage d'un service Apache sous Windows dont, en
final, le pourquoi est traité par une regex qui me paraît beaucoup trop
simple !
Je publie l'historique du problème, pensant que ça pourrait servir à
d'autres.

En local sous Windows et Wampserver, pas de démarrage du service
wampapache64.
- Vérification syntaxe par "httpd.exe -t" aucune erreur

- Tentative de démarrage par "httpd.exe -n wampapache64 -k start"
aucun message et aucune erreur
Le log apache voit le service démarré
Starting the 'wampapache64' service
The 'wampapache64' service is running.
Pas d'informations supplémentaires, même en passant LogLevel sur debug.

- Tentative de démarrage par "net start wampapache64"
Le service wampapache64 démarre.
Le service wampapache64 n’a pas pu être lancé.
Une erreur spécifique à un service s’est produite : 1.
Le helpmsg ne donne aucune précision supplémentaire

- Tentative de démarrage via le gestionnaire des services
Le service n'a pas pu démarrer. Consulter le journal d'événements pour
plus de détails.

Effectivement, dans le gestionnaire d'événements :
> The Apache service named reported the following error:
>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
et
> The Apache service named reported the following error:
>>> DocumentRoot must be a directory .

Bizarre, d'autant plus que le test de syntaxe ne voit pas d'erreur (voir
plus haut).
Quelle est cette ligne 123 de httpd-vhosts.conf ?
DocumentRoot "//DS218/home/sites/photos-ottello"
Tient donc, un VirtualHost sur un disque réseau NAS.

Je vous passe les péripéties des recherches du pourquoi et du comment y
remédier, mais, même si les explications sont quelque peu sibyllines, la
documentation Apache m'a bien aiguillée :
Apache - Configuration de l'accès aux ressources réseau
http://httpd.apache.org/docs/2.4/fr/platform/windows.html#windrivemap
/Lorsqu'Apache s'exécute en tant que service, vous devez créer un compte
spécifique afin de pouvoir accéder aux ressources réseau/
Et c'était bien ça. Dans les propriétés du service, Connexion, il faut
remplacer le Compte Système local par Ce compte avec un compte
utilisateur/administrateur et mot de passe.

Vu qu'avec Wampserver j'utilise php CLI pour récupérer les informations
système, je vous passe les péripéties pour trouver comment accéder à
l'observateur d'événements en ligne de commande pour retrouver les deux
dernières erreurs éventuelles sur Apache Service ; en php, ça donne :
> $command = "wevtutil qe Application /c:2 /rd:true /f:text /q:\"*[System[Provider[@Name='Apache Service'] and (Level=2)]]\"";
> $output = `$command`;

On en arrive doucement aux regex...
Le résultat total, si il y a des erreurs Apache Service est :
---------------------------------------------
Event[0]:
Log Name: Application
Source: Apache Service
Date: 2020-01-04T13:02:49.288
Event ID: 3299
Task: N/A
Level: Erreur
Opcode: Informations
Keyword: Classique
User: N/A
User Name: N/A
Computer: DOMI
Description:
The Apache service named reported the following error:
>>> DocumentRoot must be a directory .

Event[1]:
Log Name: Application
Source: Apache Service
Date: 2020-01-04T13:02:49.288
Event ID: 3299
Task: N/A
Level: Erreur
Opcode: Informations
Keyword: Classique
User: N/A
User Name: N/A
Computer: DOMI
Description:
The Apache service named reported the following error:
>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
---------------------------------------------
Ce que je cherche est de ne récupérer que la dernière ligne de chaque
bloc, celle qui commence par >>> et le preg_match_all est, après
quelques essais, modifications et simplifications :

preg_match_all("~(>>>.*)$~m",$output,$matches);

N'y aurait-il pas des risques ?

Pour être certain que c'était bien les lignes après Description: j'avais
avant simplification :
preg_match_all("~Description:.*\r?\n.*\r?\n(>>>.*)\r?$~im",$output,$matches);

Merci d'avoir lu jusqu'au bout.


--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit
nouveau, même si c'est pire qu'avant et cela de toute évidence.
Henry de Montherlant - Va jouer avec cette poussière

Olivier Miakinen

unread,
Jan 4, 2020, 10:45:32 AM1/4/20
to
Bonjour,

Le 04/01/2020 15:11, Otomatic a écrit :
> [...]
>
> On en arrive doucement aux regex...
> Le résultat total, si il y a des erreurs Apache Service est :
> ---------------------------------------------
> Event[0]:
> Log Name: Application
> [...]
> Description:
> The Apache service named reported the following error:
>>>> DocumentRoot must be a directory .
>
> Event[1]:
> Log Name: Application
> [...]
> Description:
> The Apache service named reported the following error:
>>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
> ---------------------------------------------
> Ce que je cherche est de ne récupérer que la dernière ligne de chaque
> bloc, celle qui commence par >>> et le preg_match_all est, après
> quelques essais, modifications et simplifications :
>
> preg_match_all("~(>>>.*)$~m",$output,$matches);

La dernière ligne de chaque bloc, ou la dernière ligne tout court ?

D'après la doc, avec l'option PCRE_MULTILINE (m), le '$' n'est valable
qu'une seule fois à la fin de la chaîne.

> Pour être certain que c'était bien les lignes après Description: j'avais
> avant simplification :
> preg_match_all("~Description:.*\r?\n.*\r?\n(>>>.*)\r?$~im",$output,$matches);

Même remarque.

> Merci d'avoir lu jusqu'au bout.

Depuis f.c.l.regexp, je n'ai lu que la fin. ;-)

--
Olivier Miakinen

Otomatic

unread,
Jan 4, 2020, 12:40:37 PM1/4/20
to
Olivier Miakinen <om+...@miakinen.net> écrivait :

> La dernière ligne de chaque bloc, ou la dernière ligne tout court ?
Ce que je veux, c'est bien la dernière ligne de chaque bloc, ce qui
correspond à toutes les lignes qui commencent par >>>

> D'après la doc, avec l'option PCRE_MULTILINE (m), le '$' n'est valable
> qu'une seule fois à la fin de la chaîne.
Je me suis aussi posé la question !
Et pourtant, $matches[1] contient bien les deux lignes :
>>> DocumentRoot must be a directory .
>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
D'ailleurs $matches[0] contient la même chose.

Les essais suivants :
- Sans $ :
preg_match_all("~(>>>.*)~m",$output,$matches);
- Sans $ et sans option m
preg_match_all("~(>>>.*)~",$output,$matches);
donnent exactement les mêmes résultats
- Sans $, sans option m et sans parenthèses
preg_match_all("~>>>.*~",$output,$matches);
donne le même résultat mais uniquement dans $matches[0]

Ça me paraît cohérent, vu que .* veut dire n'importe quelle suite de
caractères sauf le caractère de nouvelle ligne.

> > Merci d'avoir lu jusqu'au bout.
> Depuis f.c.l.regexp, je n'ai lu que la fin. ;-)
L'IA de ce groupe est au top !
--
Un ordinateur résout des problèmes que nous n'aurions pas sans lui
Technique aéronautique : http://aviatechno.net
0 new messages