Bonjour,
je dévelloppe une petite API en PHP, qui doit tourner sur un Windows server 2008 R2, IIS 6.
Cette API doit analyser le contenu de fichiers envoyés par des requêtes et les classer dans le bon dossier.
Ces dossiers sont des lecteurs réseaux. J'ai résolu le problème dans mon environnement de dev (Win10 + WAMP) en montant le lecteur réseau le temps de copier le fichier et en le démontant ensuite. Pour cela j'utilise la fonction php exec() avec la commande NET use.
Mais dés que j'ai passer mon code sur mon environement de prod, je ne peux plus utiliser la commande NET use. Lorsque je récupère la sortie de la commande, j'ai une chaine vide et le code de sortie de la commande est 2.
Voila un fichier de test très basique, juste pour vérifier l'accès à la commande NET use :
<!DOCTYPE html>
<?php $code; ?>
<html>
<head>
<meta charset="UTF-8"/>
<style>
.console{
background : lightgray;
padding: 10px;
font-family: monospace;
}
</style>
</head>
<body>
<?php
$cmd = "whoami";
$result = process($cmd);
?>
<h3><?= $cmd ?> :</h3>
<div class="console">
<?php foreach ($result as $line): ?>
<p><?= $line ?></p> //=> [HOSTNAME\USERNAME]
<?php endforeach; ?>
<p><?= $code ?></p> //=> 0
</div>
<?php
$cmd = "c:\\Windows\System32\\net.exe";
$result = process($cmd);
?>
<h3><?= $cmd ?> :</h3>
<div class="console">
<?php foreach ($result as $line): ?>
<p><?= $line ?></p> //=> rien
<?php endforeach; ?>
<p><?= $code ?></p> //=> 2
</div>
</body>
</html>
<?php
function process($cmd) {
global $code;
$backs = [];
exec($cmd, $backs, $code);
return $backs;
}
?>
J'ai modifié l'utilisateur par défaut d'IIS par un utilisateur windows, pensant que c'était un problème de droit (j'ai même testé avec le compte admin) mais le problème est toujours présent, je ne peux pas me servir de cette commande NET use... Lorsque je tape les mêmes commandes manuellement avec le même compte dans un terminal, cela fonctionne.
Par contre j'ai testé tout un tas d'autres commandes avec exec (WHOAMI, ARP, ...) il n'y a que NET qui bloque.
Est-ce que quelqu'un, s'il vous plait, connaitrait la manipulation pour résoudre ce problème ?
D'avance merci.
Bonjour,
essaie de changer le parametre fastcgi.impersonate dans le php.ini à 0.
C'est vrai que c'est mieux quand il est à un mais quand on veux faire des comandes systèmes sur Windows, il faut le passer à 0 et en execution qqn qui à les droits.
Je te conseille, si tu as plusieurs sites sur ton serveurs d'avoir un module php bien à part pour ce paramètre (facile à mettre en place avec phpmanager).
Ah et normalement, sur Windows 2008R2 c'est IIS 7.5 qui est installé.