2009-09-10 12 views
10

Sono in esecuzione in un ambiente controllato, solo xp, intranet e ho bisogno di avviare processi esterni da applicazioni PHP. (Backup, report, ecc.)php Come si avvia un programma esterno in esecuzione - Problemi con sistema ed exec

Posso ottenere sistema o exec per avviare processi che funzionano in modo silenzioso. Ecco un semplice esempio

<?php exec ("echo hello > hello.txt");?> 

Posso farlo per eseguire un file bat che non ha output visibile.

non posso ottenere qualsiasi programma che ha uno schermo per eseguire come un generatore di report o blocco note ...

<?php exec ("explorer");?> 

non fa nulla. o lo stesso per il sistema

risposta

4

Quale comportamento ti aspetti? Chiamare system('notepad') funziona correttamente, ma non visualizza la GUI. Funziona in background, e PHP si siede lì pazientemente in attesa che il blocco note si chiuda (e continua solo se si cancella il blocco note dall'elenco dei processi).

Se ti aspetti che compaia una GUI, sono abbastanza certo che non puoi farlo. ;) Un'opzione potrebbe essere quella di scrivere uno script batch (file_put_contents('runme.bat', 'notepad hello.txt')) e fare in modo che lo script batch sia in coda (con lo scheduler di Windows o qualsiasi cosa l'equivalente cron sia su Windows) per eseguire in modo asincrono (e cancellarlo alla fine).

+0

Vedo cosa intendi. Hai ragione il blocco note è in esecuzione senza una GUI. (La mia configurazione è scaduta dopo 60 secondi.) Quindi non posso avviare un programma basato su GUI con PHP e ricorrere a soluzioni basate su OS. Buono a sapersi. Grazie ! – sdfor

17

Risposta molto tarda, ma stavo lavorando su questo da solo e ho scoperto che è effettivamente possibile eseguire un programma GUI da PHP con il server Apache su Windows XP.

  • Start-> Esegui, digitare "services.msc" per far apparire il controllo Services (altri modi per arrivarci, questo è più facile IMO)
  • individuare il servizio Apache (il mio è stato chiamato "wampapache" utilizzando WampServer 2.0)
  • Aprire le proprietà del servizio (doppio clic o click destro-> proprietà)
  • flip al Log On conto e garantire la casella di controllo dal titolo "Consenti al servizio di interagire con il desktop" viene controllato
  • flip torna alla scheda Generale, interrompi il servizio, st art the service

Ora, utilizzando il codice seguente, è possibile generare processi UI da PHP. Nel primo snippet di codice, lo script non aspetterà che l'applicazione si chiuda; il secondo snippet attende che il programma si chiuda prima di continuare (bloccare).

Non aspettare per l'applicazione:

pclose(popen("start /B notepad.exe", "r"));

Attendere per l'applicazione:

system('start notepad.exe');

Questo è stato testato su Windows XP. Non l'ho provato su nessuna altra versione di Windows, il tuo millwork potrebbe variare.

Nota a margine Sul mio particolare installazione, stavo usando l'altra opzione nella Accedi scheda del servizio - Apache è in esecuzione come utente del dominio in modo che possa accedere a diverse parti della rete con le autorizzazioni utente di dominio. La casella di controllo non è disponibile per tale opzione, solo quando il servizio è in esecuzione come sistema locale. Dopo una lunga ricerca, ho scoperto che non c'è semplicemente alcun modo per un singolo servizio di interagire con il desktop corrente e utilizzare le credenziali di un utente specifico. Si tratta di una proposizione one-or-the-other, con il rimedio suggerito di dividere il servizio in due componenti: uno che utilizza i privilegi dell'account utente e uno che interagisce con il desktop. Non molto pratico quando il servizio di cui parli è il server web. Questa nota è probabilmente abbastanza specifica per il mio caso d'uso, ma volevo metterla qui nel caso in cui potessi salvare qualcun altro la frustrazione in futuro.

+2

Sono curioso di sapere come questo abbia ottenuto 10 upvotes - gira ancora il blocco note come un processo in background per il mio setup anche se l'ho su "interact with desktop". Sto usando Windows 7. – user24601

+0

@ user24601 Questo è stato testato solo per Windows XP. Ne prenderò nota nella risposta. Per quanto riguarda gli upvotes ... a chi importa? –

+0

Funzionante bene su Windows 7 – mpyw

12

Un'altra risposta super tardi, ma questo viene su Google per la ricerca di "eseguire il programma gui php" ...

sono stato in grado di lanciare un'applicazione GUI in Windows 8.1, rendendo, l'esecuzione e l'eliminazione di un operazione pianificata:

shell_exec('SCHTASKS /F /Create /TN _notepad /TR "notepad.exe" /SC DAILY /RU INTERACTIVE'); 
shell_exec('SCHTASKS /RUN /TN "_notepad"'); 
shell_exec('SCHTASKS /DELETE /TN "_notepad" /F'); 
+0

Ho Windows 7 e ho provato altre risposte, mentre non è riuscito a iniziare gui, ma questo funziona perfettamente. –

+0

ha anche combattuto su Win10 con nessuna delle soluzioni funzionanti - questo funziona al 100% +1 per outthebox .. – l0ft13

+0

Come aprire le cartelle locali, ad esempio il file system? –

Problemi correlati