Foros del Web » Programando para Internet » PHP »

¿cual es la manera correcta de hacer un exec? Windows

Estas en el tema de ¿cual es la manera correcta de hacer un exec? Windows en el foro de PHP en Foros del Web. Bueno este nuevo pos es con motivo de agradecer a Triby que me dio luces de como correr correctamente la función exec() de php, para ...
  #1 (permalink)  
Antiguo 21/07/2011, 14:28
 
Fecha de Ingreso: junio-2007
Ubicación: En Bogotá
Mensajes: 61
Antigüedad: 16 años, 10 meses
Puntos: 3
De acuerdo ¿cual es la manera correcta de hacer un exec? Windows

Bueno este nuevo pos es con motivo de agradecer a Triby que me dio luces de como correr correctamente la función exec() de php, para un ambiente windows, el foro donde pregunte parece ser bastante antiguo por lo tanto abro este, para que si algún usuario tiene las mismas dudas que yo tuve no quede en las mimas que yo quede.

Esta era la parte de mi respuesta en el foro antiguo:

Gracias Triby: si vieras las vueltas que di hoy hasta que por fin lo encontré y el código que corre bien, pero es cierto en windows no hay forma de hacerlo directo a menos de instalar las herramientas de "PSExec", y vieras que en las primeras pruebas nada que me andaba... por que tenia que agregar el comando -accepteula, es como el acuerdo de licencia por mas que lo uses en el comando de linea, bueno finalmente este fue el código que me corrió en windows:

Código PHP:
<?php
// pstools.inc.php

    
function PsExecute($command$timeout 60$sleep 2) {
        
// First, execute the process, get the process ID
        
$pid PsExec($command);
       
        if( 
$pid === false )
            return 
false;
       
        
$cur 0;
        
// Second, loop for $timeout seconds checking if process is running
        
while( $cur $timeout ) {
            
sleep($sleep);
            
$cur += $sleep;
            
// If process is no longer running, return true;
            
if( !PsExists($pid) )
                return 
true// Process must have exited, success!
        
}
       
        
// If process is still running after timeout, kill the process and return false
        
PsKill($pid);
        return 
false;
    }
   
    function 
PsExec($command) {
        
//exec( dirname(__FILE__). "\\psexec.exe -s -d $command  2>&1", $output);
        
exec("psexec -accepteula -s -d $command  2>&1"$output);

        while( list(,
$row) = each($output) ) {
            
$found stripos($row'with process ID ');
            if( 
$found )
                return 
substr($row$foundstrlen($row)-$found-strlen('with process ID ')-1); // chop off last character '.' from line
        
}
       
        return 
false;
    }
   
    function 
PsExists($pid) {
        
//exec( dirname(__FILE__). "\\pslist.exe $pid 2>&1", $output);
        
exec("pslist -accepteula $pid 2>&1"$output);

        while( list(,
$row) = each($output) ) {
            
$found stristr($row"process $pid was not found");
            if( 
$found !== false )
                return 
false;
        }
       
        return 
true;
    }
   
    function 
PsKill($pid) {
        
//exec( dirname(__FILE__). "\\pskill.exe $pid", $output);
        
exec("pskill -accepteula $pid"$output);
    }
    
?>
PD: El codigo lo encontre en php.net , referente a el código comentado es porque tengo instalado las herramientas de PSExec en el path de windows para que me corra de esta manera.

Un saludo y de nuevo gracias

Etiquetas: exec, windows, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 04:22.