Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Bug]: herd php:update hangs indefinitely on Windows when background PHP processes hold file locks

Aperta
#1,775 5 commenti 5 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
42/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
php
Ambito
devtools

Direzione di ricerca

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.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

windows
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:

  1. Herd should pre-check whether any php.exe processes originating from bin\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."

  2. 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\php85 can be renamed to bin\php85_old, and the new version extracted to a clean bin\php85. Running workers will continue smoothly from php85_old until restarted, while new executions immediately use the updated PHP 8.5.11 binaries.
  3. Add a timeout and proper error reporting to makeAppRequest so the CLI never hangs indefinitely.
Steps to reproduce
  1. On Windows, start any long-running PHP process using the target PHP version (e.g., in a Laravel project run composer run dev or php artisan serve).
  2. Open a separate terminal and run:
    herd php:update 8.5
    
    (Or click "Update" next to PHP 8.5 in the Herd Settings GUI).
  3. Observe that the command hangs indefinitely at INFO Updating PHP 8.5....
  4. Inspect %APPDATA%\Herd\logs\main.log to see that Download complete was 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
Lingua principale
Nessun dato sulla lingua
Stelle
124
Fork
1
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di beyondcode/herd-community

Tutte le issue di beyondcode/herd-community

Issue simili

Altre issue su DevTools

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.