O caractere de redirecionamento no Microsoft Windows, assim como em outros sistemas operacionais, como Linux, OS X, etc., é ">". Então você pode redirecionar a saída da seguinte forma:
php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php > "C:\somedir\php.log"
Modifique o caminho do diretório e o nome do arquivo para o que quiser. Você não precisa de aspas duplas em torno dessa informação, a menos que tenha um espaço no caminho do diretório ou no nome do arquivo, mas você faz isso se houver um espaço e não faz mal incluí-los nos dois casos.
Nota: quando você usa o ">" Se algum arquivo já existir com o local e nome que você especificou, esse arquivo será sobrescrito. Se, em vez disso, você quiser que o arquivo de registro continue crescendo, ou seja, deseja anexar a um arquivo existente na próxima vez que iniciar o php.exe, use >>
, em vez de >
. Isso resultará na criação do arquivo se ele não existir, mas a saída será anexada a um arquivo existente.
Você pode usar o comando taskkill para finalizar um processo. Por exemplo, você pode usar:
taskkill /f /fi "imagename eq php.exe"
O /f
pode não ser necessário, mas com essa opção você pode ter os processos de força do comando taskkill para fechar, que podem não fechar de outra forma. O /fi
filtra a saída do comando taskkill. Nesse caso, você estaria filtrando para ver somente os processos denominados php.exe. Se o processo não estiver em execução, você verá o seguinte se emitir o comando:
C:\>taskkill /fi "imagename eq php.exe"
INFO: No tasks running with the specified criteria.
Você pode verificar se o php.exe já está em execução usando o comando tasklist:
tasklist /fi "imagename eq php.exe"
Isso mostrará todas as instâncias de um processo chamado php.exe em execução. Em alguns casos, você pode ter vários processos com o mesmo nome, por exemplo, chrome.exe. Em outros casos, como o explorer.exe, você deve ver apenas um e verá algo como o seguinte:
C:\>tasklist /fi "imagename eq explorer.exe"
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
explorer.exe 91484 Console 1 37,424 K
Você também pode verificar se está executando "canalizando" a saída do comando tasklist para o comando find com o "|" personagem de cachimbo. Por exemplo:
C:\>tasklist /fi "imagename eq explorer.exe" | find /i /c "explorer.exe"
1
O /i
instrui a localização para ignorar o caso de letras, por exemplo, letras maiúsculas e minúsculas não importam. Provavelmente não é necessário, neste caso, se o processo será sempre chamado "php.exe", mas eu mencionei isso no caso de você poder usar find "Php.exe"
quando o processo é chamado "php.exe". O /c
informa ao encontrar apenas para contar o número de ocorrências da string que você disse para procurar.
Se o resultado for "1", ou maior, se o processo puder ser executado mais de uma vez, ele estará em execução. Se for "0", não está em execução. No seu caso, a resposta provavelmente será sempre 0 ou 1 e você mudaria "explorer.exe" para "php.exe". Se você quisesse testar o resultado e emitir o comando taskkill se o valor não for zero ou você poderia simplesmente emitir o comando taskkill sempre que quiser parar o processo, se ele estiver em execução. Se não estiver em execução, o comando taskkill apenas reportará "INFO: Nenhuma tarefa sendo executada com os critérios especificados".
Se você não quer que a janela permaneça aberta, você pode usar o comando "start" no seu arquivo de lote. Por exemplo,
start "PHP" "php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php"
O "PHP" após o comando está fornecendo um título para a janela. Você pode emitir o comando start /?
em um prompt de comando para ver as opções do comando start.