Во-первых, и в качестве хорошей практики, вы всегда должны использовать абсолютные пути, а не относительные пути.Система может искать start.bat в другом месте.Вы никогда не узнаете наверняка, где у любого автоматического вызова есть относительная точка.Я мог бы рассказать вам несколько забавных хранилищ стертых путей system32.
Во-вторых, exec () означает исполняемый файл.В зависимости от настроек вашей системы, bat-файл может не распознаваться как исполняемый файл.Расширение .bat использовалось во времена DOS для пакетных файлов.Системы Windows начиная с Windows NT используют .cmd.
На веб-сервере Windows откройте командную строку и введите
set PATHEXT
Там вы должны увидеть .BAT.Если это установлено, то .bat должен запускаться с exec ().
Если вы не видите .bat и в качестве еще одной хорошей практики вы можете сначала запустить хост для файла bat, который является cmd.
exec('cmd /c c:\www\start.bat');
Вы также можете попробовать system () вместо exec ().