[Bug]: herd php:update hangs indefinitely on Windows when background PHP processes hold file locks
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 42/100
Línea de trabajo
Start by tracing the herd php:update command to Herd::updatePHP() and its makeAppRequest("update-php/{$version}") call; inspect the Windows update and extraction path described in the issue. Reproduce with a background PHP process holding files in bin\php85, then check the CLI and Settings GUI behavior. Done means updates report a clear failure or complete despite those locks, requests cannot hang indefinitely, and the GUI refreshes update availability.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Platform
Windows
Operating system version
Windows 11 (Build 26220)
System architecture
Windows
Herd Version
2.0.2
PHP Version
PHP 8.5.9 (cli) (built: Jul 28 2026 13:21:17) (NTS)
Bug description
What happened:
When running herd php:update 8.5 in terminal (or clicking the "Update" button in the Herd Settings GUI), the update process hangs indefinitely after displaying:
INFO Updating PHP 8.5...
Looking at the logs in %APPDATA%\Herd\logs\main.log, Herd successfully stops the local CGI service and completes downloading https://download.herdphp.com/8.5/php85-win.zip (36 MB) to %TEMP%\php-8.5.zip. However, the process stalls completely right after the download finishes.
Root cause:
On Windows NTFS, running executables and loaded DLLs (php.exe, php8.dll, libpq.dll, libssl-3-x64.dll, etc.) are locked exclusively by the operating system (ERROR_LOCK_VIOLATION / EBUSY). When a developer has active background processes running under that PHP version (such as composer run dev, php artisan serve, queue:listen, reverb:start, or pulse:work), any attempt to overwrite or extract files directly into bin\php85 in-place is blocked by Windows.
Because Herd::updatePHP() delegates to makeAppRequest("update-php/{$version}") via curl_exec without a timeout or file-lock pre-check, both the CLI command and the desktop background process remain stuck in limbo indefinitely.
Additionally, once the binary is manually updated, the Herd Settings GUI detects the new version string (e.g. 8.5 (8.5.11)), but the red Update button remains visible because updateAvailable is cached in memory and not refreshed until the Herd desktop application is completely exited and reopened.
What was expected:
- Herd should pre-check whether any
php.exeprocesses originating frombin\php<version>are currently active. If so, fail gracefully with an informative warning:"Cannot update PHP while processes using this version are running. Please stop active dev servers (e.g., artisan serve, queue workers) and try again."
- Alternatively, perform an atomic folder swap (Windows best practice): In Windows, while files inside a folder cannot be overwritten while in-use, the parent directory
bin\php85can be renamed tobin\php85_old, and the new version extracted to a cleanbin\php85. Running workers will continue smoothly fromphp85_olduntil restarted, while new executions immediately use the updated PHP 8.5.11 binaries. - Add a timeout and proper error reporting to
makeAppRequestso the CLI never hangs indefinitely.
Steps to reproduce
- On Windows, start any long-running PHP process using the target PHP version (e.g., in a Laravel project run
composer run devorphp artisan serve). - Open a separate terminal and run:
(Or click "Update" next to PHP 8.5 in the Herd Settings GUI).herd php:update 8.5 - Observe that the command hangs indefinitely at
INFO Updating PHP 8.5.... - Inspect
%APPDATA%\Herd\logs\main.logto see thatDownload completewas logged, but no extraction or completion ever happens.
Relevant log output
[info] Stopping PHP-8.5 with PID 4732
[info] Stopped PHP-8.5
[info] PHP-8.5 exited
[info] Deleted PID file C:\Users\<User>\.config\herd\.pid\php-8_5.pid
[info] Notifying windows of service update: PHP-8.5 - inactive
[info] Downloading PHP 8.5 (8.5.11) from https://download.herdphp.com/8.5/php85-win.zip to C:\Users\<User>\AppData\Local\Temp\php-8.5.zip
[info] Total length: 36048897
[info] Download complete
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 124
- Forks
- 1
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de beyondcode/herd-community
-
macOS
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
beyondcode/herd-community#1774 ·
-
[Bug]: PHP 8.3 php.ini missing auto_prepend_file and herd-ext extension lines (dump() undefined)AbiertomacOS
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
beyondcode/herd-community#1693 ·
-
macOS
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
beyondcode/herd-community#1602 ·
-
windows
Dificultad 3/5 1-2 días Aptitud para principiantes 55/100
beyondcode/herd-community#1779 ·
-
needs more information windows
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
beyondcode/herd-community#1778 · 1 comentario ·
Todos los issues de beyondcode/herd-community
Issues similares
-
createAI: the ai peer range allows ai@6, which the provider cannot work withPosiblemente ocupada @akhil9tiet la tomó hoy. Abiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 83/100
cloudflare/agents#2690 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
Los mantenedores suelen responder en 1 día
-
roadmap-100
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
Los mantenedores suelen responder en 1 día
-
comp/tools P2 tool/browser tool/file type/bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
NousResearch/hermes-agent#143418 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
priority: medium status: needs-decision work-class: scoped
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
melodic-software/claude-code-plugins#9339 · 2 comentarios ·
Los mantenedores suelen responder en 1 día