O problema com s3cmd neste caso não é o arquivo s3cmd, mas sim o arquivo de configuração, cujo padrão é ~ / .s3cfg O script da CLI que é executado como root tem acesso de leitura a ele, mas o servidor da web do apache não. Tudo o que você precisa fazer é copiar o arquivo de configuração para outro local e chown-lo para que o usuário do apache possa acessá-lo, então na opção shell_exec use -c FILE de s3cmd. Além disso, você precisa configurar env var HOME para uma string vazia, porque o script s3cmd dá prioridade sobre o -c. então seu shell_exec será parecido com: shell_exec ('export HOME=""; s3cmd -c ....');