В Интернете есть разные типы пользователей, поэтому мы хотим поймать IP-адрес из разных зелий. То есть
1. $_SERVER['REMOTE_ADDR']
- содержит реальный IP-адрес клиента. Это самое надежное значение, которое вы можете найти у пользователя.
2. $_SERVER['REMOTE_HOST']
- Это позволит получить имя хоста, с которого пользователь просматривает текущую страницу. Но для того, чтобы этот скрипт работал, имя хоста Lookups On внутри httpd.conf должно быть настроено.
3. $_SERVER['HTTP_CLIENT_IP']
. Это приведет к выбору IP-адреса, когда пользователь находится в общих интернет-сервисах.
4. $_SERVER['HTTP_X_FORWARDED_FOR']
- Это приведет к выбору IP-адреса у пользователя, когда он находится за прокси
. Таким образом, мы можем использовать эту следующую комбинированную функцию для получения реального IP-адреса от пользователей, которые просматривают разные позиции,
// Function to get the user IP address
function getUserIP() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
Здесь вы смешиваете 3 разных объекта:
GLEW и GLU - это совершенно разные вещи, и вы не можете заменить их другим.
GL/gl.h
являются базовыми заголовками OpenGL , которые дают вам функции OpenGL-1.1 и объявления токенов, возможно, больше. Для чего-либо, выходящего за пределы версии 1.1, вы должны использовать механизм расширения OpenGL. Так как это скучная и утомительная задача, которая была автоматизирована проектом GLEW, который предлагает все грязные детали, собранные в простой в использовании библиотеке. Объявления этой библиотеки находятся в файле заголовка GL/glew.h
. Поскольку расширения OpenGL не имеют смысла без базового OpenGL, заголовок GLEW неявно включает в себя обычный заголовок OpenGL, поэтому, включая GL/glew.h
, вам больше не нужно включать GL/gl.h
.
Затем есть GLU, набор удобных методов, которые BTW серьезно устарели и не должны использоваться в любой современной программе OpenGL. Там нет современного GLU, поэтому просто забывайте об этом. В любом случае, объявления становятся доступными заголовком GL/glu.h
(тот, о котором вы просили).
Ошибки, которые вы получаете , не имеют никакого отношения к файлам . Это ошибки компоновщика. Просто включение деклараций - это только половина работы. Другая половина связывает фактические определения , и они не находятся в заголовке в файле библиотеки; libglew.so
или libglew.a
в ОС * nix OS, glew.lib
или glew32.lib
или glews.lib
или glew32s.lib
в Windows. Если вы не используете статические версии (те, у которых нет «s»), вы также должны установить правильную DLL.
Итак, чтобы использовать GLEW, вам нужно включить заголовок и добавить его в список библиотек в линкера. Также вы должны называть glewInit();
, как только вы получили контекст OpenGL в своей программе.
Я очень новичок в материалах OpenGL, поэтому, пожалуйста, исправьте меня, если я ошибаюсь.