我是初学者/爱好者程序员。我正在研究一个网络摄像头应用程序,它也有一些gpio引脚拼接在一起我在网上找到的代码。我在index.php文件中有一个img src标记,需要根据我是从LAN中还是从外部访问页面来更改。
我在另一个论坛上找到以下信息,如果我手动将img src标签更改为内部或外部IP,具体取决于我是否在我的局域网上,但我希望能够访问该页面从任何一个,无需手动更改index.php文件。
我在raspberry pi论坛上找到的选项: 更改标记以使用外部IP。如果这打破了内部网络,您可以使用单独的页面进行内部对外部,也可以编写脚本来确定http客户端是来自内部IP还是外部IP,并相应地更改标记。
有人可以告诉我如何根据客户端是在外部网络还是内部网络上来实现可以更改img src标记的备用索引页面或脚本?
以下是带有img src标记的索引页面的代码:
<!DOCTYPE html>
!--TheFreeElectron 2015, http://www.instructables.com/member/TheFreeElectron/ -->
<html>
<head>
<meta charset="utf-8" />
<title>Raspberry Pi Gpio</title>
</head>
<body style="background-color: black;">
<center>
<img src="http://192.168.0.34:8080/stream/video.mjpeg">
</center>
<!-- On/Off button's picture -->
<?php
$val_array = array(0,0,0,0,0,0,0,0);
//this php script generate the first page in function of the file
for ( $i= 0; $i<8; $i++) {
//set the pin's mode to output and read them
system("gpio mode ".$i." out");
exec ("gpio read ".$i, $val_array[$i], $return );
}
//for loop to read the value
$i =0;
for ($i = 0; $i < 8; $i++) {
//if off
if ($val_array[$i][0] == 0 ) {
echo ("<img id='button_".$i."' src='data/img/red/red_".$i.".jpg' onclick='change_pin (".$i.");'/>");
}
//if on
if ($val_array[$i][0] == 1 ) {
echo ("<img id='button_".$i."' src='data/img/green/green_".$i.".jpg' onclick='change_pin (".$i.");'/>");
}
}
?>
<!-- javascript -->
<script src="script.js"></script>
</body>
</html>
由于
答案 0 :(得分:0)
鉴于您使用PHP呈现页面,您可以获取请求的IP并根据结果更改呈现的输出。
在get_client_ip()
回复帖中列出了一些安全问题,但鉴于这只是用于更改图片的src
,我相信没有真正的问题(除了可能暴露之外)您的内部IP配置)给试图“欺骗”其IP的人。
<?php
// https://stackoverflow.com/a/15699240/648350
// Function to get the client IP address
function get_client_ip() {
$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_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;
}
// define our default image src prefix
$image_src_prefix = "http://192.168.0.34:8080/";
const LOCAL_IP_PREFIX = "192.168."; // define our local ip prefix (ie. some LAN's use "10.0.")
// test for ip starting with our local IP prefix
if( substr(get_client_ip(), 0, strlen(LOCAL_IP_PREFIX)) !== LOCAL_IP_PREFIX ){
// we are NOT local so update the image src prefix
$image_src_prefix = "http://INSERT_EXTERNAL_IP_HERE/";
}
?>
<!DOCTYPE html>
!--TheFreeElectron 2015, http://www.instructables.com/member/TheFreeElectron/ -->
<html>
<head>
<meta charset="utf-8" />
<title>Raspberry Pi Gpio</title>
</head>
<body style="background-color: black;">
<center>
<img src="<?php echo $image_src_prefix; ?>/stream/video.mjpeg">
</center>
<!-- On/Off button's picture -->
<?php
$val_array = array(0,0,0,0,0,0,0,0);
//this php script generate the first page in function of the file
for ( $i= 0; $i<8; $i++) {
//set the pin's mode to output and read them
system("gpio mode ".$i." out");
exec ("gpio read ".$i, $val_array[$i], $return );
}
//for loop to read the value
$i =0;
for ($i = 0; $i < 8; $i++) {
//if off
if ($val_array[$i][0] == 0 ) {
echo ("<img id='button_".$i."' src='data/img/red/red_".$i.".jpg' onclick='change_pin (".$i.");'/>");
}
//if on
if ($val_array[$i][0] == 1 ) {
echo ("<img id='button_".$i."' src='data/img/green/green_".$i.".jpg' onclick='change_pin (".$i.");'/>");
}
}
?>
<!-- javascript -->
<script src="script.js"></script>
</body>