@@ -427,10 +427,6 @@ func (f *FrankenPHPModule) Provision(ctx caddy.Context) error {
427427 }
428428 }
429429
430- if len (f .Workers ) > 0 {
431- moduleWorkers = append (moduleWorkers , f .Workers ... )
432- }
433-
434430 return nil
435431}
436432
@@ -460,20 +456,30 @@ func (f *FrankenPHPModule) ServeHTTP(w http.ResponseWriter, r *http.Request, _ c
460456 }
461457 }
462458
463- workerNames := make ([]string , len (f .Workers ))
464- for i , w := range f .Workers {
465- workerNames [i ] = w .Name
466- }
467-
468- fr , err := frankenphp .NewRequestWithContext (
459+ filename , fc , err := frankenphp .NewFrankenPHPContext (
469460 r ,
470461 documentRootOption ,
471462 frankenphp .WithRequestSplitPath (f .SplitPath ),
472463 frankenphp .WithRequestPreparedEnv (env ),
473464 frankenphp .WithOriginalRequest (& origReq ),
474- frankenphp .WithWorkerNames (workerNames ),
475465 )
466+ if err != nil {
467+ return caddyhttp .Error (http .StatusInternalServerError , err )
468+ }
469+
470+ workerName := ""
471+ for _ , w := range f .Workers {
472+ if p , _ := fastabs .FastAbs (w .FileName ); p == filename {
473+ workerName = w .Name
474+ }
475+ }
476476
477+ err = frankenphp .WithModuleWorker (workerName )(fc )
478+ if err != nil {
479+ return caddyhttp .Error (http .StatusInternalServerError , err )
480+ }
481+
482+ fr , err := frankenphp .NewRequestWithExistingContext (r , fc )
477483 if err != nil {
478484 return caddyhttp .Error (http .StatusInternalServerError , err )
479485 }
@@ -577,14 +583,28 @@ func (f *FrankenPHPModule) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
577583 envString += k + "=" + v + ","
578584 }
579585 envString = strings .TrimSuffix (envString , "," )
580- wc .Name += "env:" + envString + "_" + wc . FileName
586+ wc .Name += "env:" + envString
581587 }
582588 }
583589 if wc .Name != "" && ! strings .HasPrefix (wc .Name , "m#" ) {
584590 wc .Name = "m#" + wc .Name
585591 }
586592
593+ // Check if a worker with this filename already exists in this module
594+ for _ , existingWorker := range f .Workers {
595+ if existingWorker .FileName == wc .FileName {
596+ return fmt .Errorf ("workers must not have duplicate filenames: %s" , wc .FileName )
597+ }
598+ }
599+ // Check if a worker with this name already exists
600+ for _ , existingWorker := range moduleWorkers {
601+ if existingWorker .Name == wc .Name {
602+ return fmt .Errorf ("workers must not have duplicate names: %s" , wc .Name )
603+ }
604+ }
605+
587606 f .Workers = append (f .Workers , wc )
607+ moduleWorkers = append (moduleWorkers , f .Workers ... )
588608 }
589609 }
590610 }
0 commit comments