Nel mio ambiente di sviluppo locale, Apache e PHP sono installati su Windows 7. Sto chiamando 7-Zip dal mio programma PHP con exec. Ho provato in un primo momento conPerché PHP non riconosce un programma nel PATH del sistema Windows quando lo uso con Apache?
exec('7z a example.zip example.pdf');
ma non ha creato il file zip. Dopo aver controllato il log degli errori di Apache, ho trovato
'7z' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.
Dopo aver modificato il exec
per includere il percorso completo di 7-Zip.exe, ha funzionato.
exec('"C:\\Program Files\\7-Zip\\7z" a example.zip example.pdf');
Ma C:\Program Files\7-Zip
è incluso nel mio percorso di sistema di Windows. Lo stesso codice PHP funziona dalla riga di comando senza utilizzare il percorso completo.
php -r "exec('7z a example.zip example.pdf');"
Perché è necessario il percorso completo quando lo uso con Apache?
Un punto importante, che ho trascurato di includere quando ho originariamente postato questa domanda è che sono già in grado di utilizzare exec()
per chiamare altri programmi inclusi nel percorso di sistema di Windows senza fare riferimento a loro dai loro percorsi completi.
Un altro punto che non ho menzionato in origine perché non mi rendevo conto della sua rilevanza era che 7-Zip era stato aggiunto al PERCORSO solo recentemente, e ho riavviato il servizio Apache dopo averlo aggiunto.
Apache non è in esecuzione dal tuo account, non ha le impostazioni di 'PATH'. – Barmar
@Barmar Ho pensato di metterlo nel sistema 'PATH' piuttosto che il mio' PATH' utente si sarebbe occupato di questo. Non è così che funziona? –
... dovresti provare '/ usr/bin/7z' – hek2mgl