Получить имя машины клиента в PHP

Эта программа возвращает имя компьютера клиента только в localhost

echo gethostbyaddr($_SERVER['REMOTE_ADDR']);

Если он запущен с онлайн-сервера, имя компьютера не отображается и отображается какая-либо другая информация. Так или иначе, чтобы получить имя компьютера в php, когда программа запускается с интернет-сервера.

Что это за «другая информация»? IP-адрес?

В PHP вы используете $_SERVER['REMOTE_ADDR'] чтобы получить IP-адрес удаленного клиента, затем вы можете использовать gethostbyaddr() чтобы попытаться преобразовать этот IP в имя хоста, но не все IP-адреса настроили обратное сопоставление.

Не в PHP.
phpinfo(32) содержит все, что PHP может знать о конкретном клиенте, и нет имени компьютера [windows]

 function GetComputerName() { try { var network = new ActiveXObject('WScript.Network'); // Show a pop up if it works alert(network.computerName); } catch (e) { } } 

Это javascript, который будет работать в IE, иногда. Это лучшее, что вы можете сделать. Затем вы можете вставить это значение в элемент управления, а затем, когда пользователь отправляется на сервер, вы можете прочитать его на PHP. PHP не может делать то, что вы хотите, потому что он работает на сервере, а не на клиенте, поэтому он не может искать данные клиента.

В отличие от большинства комментариев, я думаю, что можно получить имя хоста (машинное имя) клиента в простом PHP, но это немного «грязно».

Запрашивая авторизацию «NTLM» через HTTP-заголовок …

 if (!isset($headers['AUTHORIZATION']) || substr($headers['AUTHORIZATION'],0,4) !== 'NTLM'){ header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: NTLM'); exit; } 

Вы можете заставить клиента отправлять учетные данные авторизации через формат NTLM. Хэш NTLM, отправленный клиентом на сервер, содержит, помимо учетных данных входа, имя машины клиента. Это работает только для кросс-браузера и PHP.

 $auth = $headers['AUTHORIZATION']; if (substr($auth,0,5) == 'NTLM ') { $msg = base64_decode(substr($auth, 5)); if (substr($msg, 0, 8) != "NTLMSSPx00") die('error header not recognised'); if ($msg[8] == "x01") { $msg2 = "NTLMSSPx00x02"."x00x00x00x00". "x00x00x00x00". "x01x02x81x01". "x00x00x00x00x00x00x00x00". "x00x00x00x00x00x00x00x00". "x00x00x00x00x30x00x00x00"; header('HTTP/1.1 401 Unauthorized'); header('WWW-Authenticate: NTLM '.trim(base64_encode($msg2))); exit; } else if ($msg[8] == "x03") { function get_msg_str($msg, $start, $unicode = true) { $len = (ord($msg[$start+1]) * 256) + ord($msg[$start]); $off = (ord($msg[$start+5]) * 256) + ord($msg[$start+4]); if ($unicode) return str_replace("\0", '', substr($msg, $off, $len)); else return substr($msg, $off, $len); } $user = get_msg_str($msg, 36); $domain = get_msg_str($msg, 28); $workstation = get_msg_str($msg, 44); print "You are $user from $workstation.$domain"; } } 

И да, это не просто и просто «прочитать функцию имени машины», потому что пользователю предлагается диалог, но это пример, что это действительно возможно (в отличие от других операторов здесь).

Полный код можно найти здесь: https://en.code-bude.net/2017/05/07/how-to-read-client-hostname-in-php/

Руководство PHP написано:

gethostname (PHP> = 5.3.0) gethostname – получает имя хоста

Посмотрите:

 <?php echo gethostname(); // may output eg,: sandie // Or, an option that also works before PHP 5.3 echo php_uname('n'); // may output eg,: sandie ?> 

http://php.net/manual/en/function.gethostname.php

наслаждаться

gethostname() используя IP из $_SERVER['REMOTE_ADDR'] при удаленном доступе к сценарию, вернет IP-адрес вашего интернет-соединения, а не вашего компьютера.

Пытаться

 echo getenv('COMPUTERNAME'); 

Это вернет ваше имя пользователя.