Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: yoelrodguez en 20 Agosto 2014, 15:12 pm



Título: inicar servicio Mysql y Apache
Publicado por: yoelrodguez en 20 Agosto 2014, 15:12 pm
Hola a todos, estoy haciendo un programa de php para iniciar los servicios de Mysql y Apache de mi servidor. Lo que me está sucediendo es lo siguiente,  cuando se inició el servicio de mysql se me detienes la ejecución del script. Lo me mismo me sucede si inicio primero el  apache. A continuación le dejo el código:

Código:
<?php
echo "Iniciamos servicios";

chdir("/xampp/mysql/bin/");
if(system('mysqld')){
echo "Servicio Mysql Iniciado";
}
echo "Iniciamos servicio de Apache 2.2";
chdir("/xampp/apache/bin");
if(system('httpd.exe')){
echo "Servicio Apache Iniciado";
}
?>


Título: Re: inicar servicio Mysql y Apache
Publicado por: engel lex en 20 Agosto 2014, 17:35 pm
Para que corra php tiene que apache estar corriendo, no entiendo como ejecutas el php  sin  apache...


Título: Re: inicar servicio Mysql y Apache
Publicado por: yoelrodguez en 20 Agosto 2014, 19:03 pm
El php lo estoy ejecutando desde la línea de comando. El c:>xampp\php\php.exe prueba.php


Título: Re: inicar servicio Mysql y Apache
Publicado por: engel lex en 20 Agosto 2014, 19:31 pm
Ahh ya, lo mas probable es que el  apache  reinicie  el  modulo  php para asegurar su funcionamiento, tal vez el mysql haga algo similar


Título: Re: inicar servicio Mysql y Apache
Publicado por: yoelrodguez en 20 Agosto 2014, 19:49 pm
Después de lo que me comentaste, hice la prueba con un .bat y me sucede lo mismo. Si uno inicia no me inicia el otro y viceversa. No sé si es que tenga que colocar algo en la configuración del apache o del mysql.

Código:
@echo off
echo Iniciar.
apache\bin\httpd.exe
mysql\bin\mysql.exe
goto finish


Título: Re: inicar servicio Mysql y Apache
Publicado por: #!drvy en 20 Agosto 2014, 20:19 pm
El problema que tienes, es que ambas applicaciones tiran output cuando las llamas. Por tanto, php se queda esperando que termine el output de la primera para ejecutar la segunda.

Esto se puede solucionar añadiendo " & " al final de cada system().
Código
  1. system('mysqld &');

El problema, es que de igual modo, php y system() se quedaran a la espera de que finalicen estos programas para cerrarse.

La solucion es usar otro programa para iniciar los servicios. En el caso de windows, tienes el comando "start" con el parametro /b. Si los usas y ocultas la salida, te sale bien.

Código
  1. <?php
  2. $services = array();
  3. $services['mysql']='xampp/mysql/bin/mysqld';
  4. $services['httpd']='xampp/apache/bin/httpd.exe';
  5.  
  6. foreach($services as $n=>$service){
  7. system('start /b '.dirname(__FILE__).$service.' &',$r);
  8. echo 'Servicio ',$n,' iniciado.',PHP_EOL;
  9. }
  10.  
  11. ?>

start /b -> Inicia el proceso en la misma ventana.
parametro $r -> es para ocultar la salida, aunque en caso de stderr, lo seguira mostrando.
dirname(__FILE__) -> El directorio donde esta el .php actual.

De todos modos PHP no fue hecho para estas cosas xD. Mirate tambien otras funciones como proc_open (http://php.net/manual/es/function.proc-open.php).

Saludos


Título: Re: inicar servicio Mysql y Apache
Publicado por: yoelrodguez en 20 Agosto 2014, 20:23 pm
Gracias todo trabajo Ok.


Título: Re: inicar servicio Mysql y Apache
Publicado por: WHK en 22 Agosto 2014, 18:07 pm
Se supone que para eso existen los servicios, debes usar el script del xampp que sirve para instalar apache e mysql como servicios, luego solo los inicias con service start apache2 && service start mysql, el tema es que ese script necesitaría permisos de root, mucho cuidado de los permisos que le des a ese script porque podrías comprometer la integridad de tu servidor, si apache corre como un usuario no www-data y como root puedes provocar que un atacante ejecute script de php desde tu pagina web como root, para eso son los servicios, ellos se encargan de iniciar los binarios con sus respectivos permisos y entornos ya que tampoco declaraste el entorno de apache ni de php.