Я всегда в любых своих проектах использовал данные из массива $_SERVER напрямую.
Использовать глобальные переменные - плохая практика. С точки зрения безопасности, тестируемости и надежности вашего кода. На счет суперглобальных: один раз при инициализации вашего приложения вытягиваете нужные для вас данные из них, проверяете и вставляете в некий объект Request, это уже данные, которым вы можете доверять, посему изменять их внутри Request нельзя. Посмотрите
symfony.com/doc/current/book/http_fundamentals.htmlrequire_once $_SERVER['DOCUMENT_ROOT'].'/папка/файл.php'
Так писать по нельзя. От слова "совсем".
Используйте Composer. Подключение файлов вручную нужно только в точке входа (обычно это index.php). Опять же с точки зрения безопасности.
Никто вам не гарантирует, что $_SERVER['DOCUMENT_ROOT'] будет правильным, да и то, что будет создан такой элемент - тоже не гарантирует.
Исходя из этого возникает вопрос. На сколько это оправдано?
Со всей силы оправдано.
Но, что мне делать с массивом $_SERVER?
По возможности - забыть про его существование)). Исключения бывают конечно же, но редко.
Каким образом он может быть подменен или в него может быть вставлена инъекция?
$_SERVER['DOCUMENT_ROOT'] = '/dev/null';
require 'path/to/your/file.php';
Если запустить скрипт из консоли - куча элементов $_SERVER просто не будут созданы, например QUERY_STRING
Может быть NetBeans прав?
Прав
и действительно нужна обработка.
Проверять нужно любые входящие данные. Вся разница только в том, на сколько детальной эта проверка должна быть. Например для переменных, что только передаются, но не обрабатываются - достаточно проверять только тип данных. В случае обработки - значение тоже.
Рекомендую почитать:
Попросили проверить код, на что смотреть нужно?