Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2019, 10:07
Leingod
 
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 15 años, 7 meses
Puntos: 0
Ejecutar programa externo (.exe) con PHP

Buenos días, estimados foreros.

Tengo un problema al que llevo unos días dándole vueltas no tengo alma de sacar, a ver si vuestra sabiduría me ilumina un poco el camino.

He realizado una web conectada al programa de gestión de mi empresa para poder tomar referencias, stocks, precios... y quiero integrar los pedidos que se realicen vía web al programa directamente sin que el compañero tenga que crearlos a mano. La integración de pedidos funciona de la siguiente manera:

1º: La web, al realizar con éxito un pedido, genera un archivo de texto con los datos necesarios para crear el pedido en el programa.
2º: Este archivo de texto se sube, mediante protocolo FTP, a un servidor aparte de donde tengo alojada la web.
3º: En dicho servidor hay un listener que revisa cierta carpeta cada X tiempo. Si detecta un archivo nuevo, lanza un programa .exe que integra el pedido en el programa (dicho programa está hecho por uno de los programadores del ERP, así que funcionar funciona).
4º: El archivo del pedido se mueve a otra carpeta de pedidos finalizados (esto lo hace el propio exe).

(¿Lo véis lioso? Yo también, pero no me dejan tocar manualmente las tablas de la base de datos, así que así estamos...)

El tema es que a veces el listener falla y no me integra bien los pedidos. Sé que están hechos porque me llega el correo de confirmación, pero si no meto los pedidos a mano se pueden quedar ahí hasta el día del juicio final, y los siguientes pedidos se siguen quedando colgados hasta que la carpeta objetivo del listener se vacía. Ah, y olvídate de integrar dos pedidos a la vez.

Para evitar problemas con los archivos (como el servidor ese falle, la jodimos, ya ha pasado), me planteo una solución: a día de hoy almaceno en otra base de datos, donde tengo total libertad de uso y abuso, los pedidos a modo de copia de respaldo. Sería genial si yo, al insertar el pedido en la tabla correspondiente, pudiera llamar al exe (obviamente modificado a tal efecto) directamente para no depender del listener en cuestión, que cogiera los datos del registro en cuestión y lo integrara en mi ERP.

Me he documentado y he visto que puedo usar exec() y system(), pero todos los ejemplo que he visto son de ejecutables alojados en el mismo servidor en el que se invoca, y aquí estamos hablando de servidores totalmente distintos. ¿Sigue siendo posible usar exec() o system() aunque sea con algún parámetro adicional, o me olvido de este sistema? (ya que estamos... ¿qué diferencia hay entre ambas funciones? Según veo en la documentación son prácticamente iguales salvo el control de la salida del buffer, y ahí me lío un poco).

Mil perdones por la parrafada, pero creo necesario poner en antecedentes para poder entender mi problema.

¡Un saludo!