Это из-за этой строки:
printf ("Hi %s,</br />", $name);
Вы не должны печатать / эхо ничего, прежде чем отправлять заголовки.
Вы получаете сообщение об ошибке вместо предупреждения, потому что включена «проверка SDL». Похоже, в VS17 SDL включен по умолчанию. Из doc :
/ sdl разрешает эти предупреждения как ошибки :
C4146 / we4146 Унарный минус оператор был применен к типу без знака, что привело к результату без знака.
C4308 / we4308 Отрицательная интегральная константа, преобразованная в тип без знака, что может привести к бессмысленному результату.
C4532 / we4532 Использование ключевых слов continue, break или goto в блоке __finally / finally имеет неопределенное поведение во время аварийного завершения.
C4533 / we4533 Код, инициализирующий переменную, не будет выполнен.
C4700 / we4700 Использование неинициализированной локальной переменной.
C4703 / we4703 Использование потенциально неинициализированной локальной переменной-указателя.
C4789 / we4789 Переполнение буфера при использовании определенных функций времени выполнения C (CRT).
C4995 / we4995 Использование функции, помеченной прагмой, устарело.
C4996 / we4996 Использование функции, помеченной как устаревшая.
blockquote>Чтобы исправить, перейдите в «Свойства» -> «C / C ++» -> «Проверка SDL», установите «Нет (/ sdl-)». После этого вы получите
: warning C4996: 'foo': was declared deprecated : note: see declaration of 'foo'