Они разные потоки и сбрасываются в разное время.
Если вы положили
System.out.flush (); System.err.flush ();
внутри вашего цикла, он будет работать так, как ожидалось.
Чтобы уточнить, выходные потоки кэшируются, поэтому вся запись поступает в этот буфер памяти.
Вы пишете два буфера, затем после периода бездействия они оба покраснели (один за другим).
Вы можете получить имя хоста, используя gethostname
попробуйте это, он должен вернуть ip-адрес сервера
$host= gethostname();
$ip = gethostbyname($host);
php -r "echo gethostbyname(php_uname('n'));"
показывает 192.168.178.20
... и я использую php 5.3.8
– Besnik
21 September 2013 в 19:30
Если все остальное не работает, вы всегда можете exec ipconfig или ifconfig в зависимости от вашей платформы и проанализировать результат.
Я знаю, что это довольно старый вопрос, но, похоже, не существует окончательного ответа (насколько это возможно). Мне нужно было определить это значение как на * NIX-боксах, так и на на коробках Win X. Также из сценария выполненного CLI, а также скрипта, отличного от CLI. Следующей функцией является лучшее, что я придумал, которое заимствует разные концепции, о которых люди говорили за эти годы. Возможно, это может быть полезно:
function getServerAddress() {
if(isset($_SERVER["SERVER_ADDR"]))
return $_SERVER["SERVER_ADDR"];
else {
// Running CLI
if(stristr(PHP_OS, 'WIN')) {
// Rather hacky way to handle windows servers
exec('ipconfig /all', $catch);
foreach($catch as $line) {
if(eregi('IP Address', $line)) {
// Have seen exec return "multi-line" content, so another hack.
if(count($lineCount = split(':', $line)) == 1) {
list($t, $ip) = split(':', $line);
$ip = trim($ip);
} else {
$parts = explode('IP Address', $line);
$parts = explode('Subnet Mask', $parts[1]);
$parts = explode(': ', $parts[0]);
$ip = trim($parts[1]);
}
if(ip2long($ip > 0)) {
echo 'IP is '.$ip."\n";
return $ip;
} else
; // TODO: Handle this failure condition.
}
}
} else {
$ifconfig = shell_exec('/sbin/ifconfig eth0');
preg_match('/addr:([\d\.]+)/', $ifconfig, $match);
return $match[1];
}
}
}
Если вы работаете с PHP & lt; 5.3, это может помочь (в системах на основе NIX по крайней мере):
mscharley@S04:~$ cat test.php
#!/usr/bin/env php
<?php
function getIPs($withV6 = true) {
preg_match_all('/inet'.($withV6 ? '6?' : '').' addr: ?([^ ]+)/', `ifconfig`, $ips);
return $ips[1];
}
$ips = getIPs();
var_dump($ips);
mscharley@S04:~$ ./test.php
array(5) {
[0]=>
string(13) "72.67.113.141"
[1]=>
string(27) "fe80::21c:c0ff:fe4a:d09d/64"
[2]=>
string(13) "72.67.113.140"
[3]=>
string(9) "127.0.0.1"
[4]=>
string(7) "::1/128"
}
mscharley@S04:~$
Или, если вы не ожидаете часто делать это, возможно, это сработает (просто не злоупотребляйте им):
$ip = file_get_contents('http://whatismyip.org/');
gethostbynamel()
) всегда будет возвращать любые IP-адреса, отображаемые в файле локальных хостов вашего сервера. В моем тестировании (Ubuntu 11.10) это означало, что если имя хоста, с которым вы проверяете, сопоставляется с 127.0.0.1 в любом месте i> в / etc / hosts, оно переопределит любые другие записи. – pospi 27 March 2012 в 08:28