我有一个小脚本,它获取基本信息,如服务器IP-,以及运行脚本的服务器的MAC地址,然后我将结果发布到mysql数据库,这很好用,代码是如下所示。但是,当我使用cronjob执行脚本时,除了存储IP地址之外的所有内容,由于某种原因,$_SERVER['SERVER_ADDR']
在作为cronjob执行时为空。
此脚本每分钟运行一次,并在多个Raspberry PI上运行,因此我可以分辨哪个连接到共享作业请求。
$mac_address = getMacLinux();
$server_ip = $config['server_ip'];
$client_ip = $_SERVER['SERVER_ADDR'];
$client_name = $config['client_name'];
$ch = curl_init();
$url = "{$server_ip}/checkin0.php";
echo "url = {$url}"."<br>";
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "client_ip={$client_ip}&client_name={$client_name}&client_mac={$mac_address}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch); // Execute
curl_close ($ch); // Close cURL handle
var_dump($output); // Show output
答案 0 :(得分:0)
我找到了以下
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];
}
答案 1 :(得分:0)
查看manual
$ _ SERVER是一个包含标题,路径和脚本位置等信息的数组。此阵列中的条目是由Web服务器
创建
PS。您也可以将脚本用作CGI脚本($ _SERVER [&#39; SERVER_ADDRESS&#39;]将是正确的)。您可以尝试fetch,wget,curl ...并从crontab调用脚本,即(server-IP为192.168.0.1):
1 * * * * fetch http://192.168.0.1/my_script.php