我是PHP的新学习者。我写了以下两个似乎有用的文件。
用文字概括两个文件的内容: Index.php创建一个包含8个图像的页面。所有这8个图像都有备用版本,表示图像/按钮处于活动状态。单击按钮并执行操作,再次单击它并执行相反的操作。 (使用XOR功能) - 图像/按钮的当前条件由外部变量决定。 (有点像反馈系统)
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="stylesheet" type="text/css" href="style2.css" />
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Project ARC: Adeel's Room Controller</title>
</head><body>
<h1>Welcome to Project ARC</h1>
<?php $curx_val=shell_exec('sudo pin 0x378');
$curx_val=decbin($curx_val);
$curx_val=str_pad($curx_val,8,0,STR_PAD_LEFT);
//echo "$curx_val";
$bit_array=str_split($curx_val,1);
//echo "$bit_array[7]";
echo '<a href="dox.php?setvalue=128"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[0] . '.png"></a> ';
echo '<a href="dox.php?setvalue=64"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[1] . '.png"></a> ';
echo '<a href="dox.php?setvalue=32"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[2] . '.png"></a> ';
echo '<a href="dox.php?setvalue=16"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[3] . '.png"></a> ';
echo '<a href="dox.php?setvalue=8"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[4] . '.png"></a> ';
echo '<a href="dox.php?setvalue=4"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[5] . '.png"></a> ';
echo '<a href="dox.php?setvalue=2"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[6] . '.png"></a> ';
echo '<a href="dox.php?setvalue=1"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit' . $bit_array[7] . '.png"></a> ';
?><br>
<br>
</body></html>
dox.php的内容
<html>
<title>PrimaryCommander</title>
<body>
<?php
//Variable Declaration
$set_val=$_REQUEST["setvalue"]; //Which light to switch on
$cur_val=shell_exec('sudo pin 0x378'); //Current lights which are ON
settype($set_val,"integer");
$xor_result=$set_val^$cur_val;
shell_exec('sudo parashell 0x378 '.$xor_result);
header( 'Location: index.php' ) ;
?>
</body>
</html>
Edit1:此脚本与并行端口接口 - 因此是shell_exec命令。命令'sudo parashell 0x378 0'将并行端口的所有引脚设置为0。
Edit2:我知道一旦页面被渲染,就无法更改。但我可以制作页面以反映实时更改吗? (有点像facebook实时馈送功能?)
答案 0 :(得分:2)
我不会重新输入你的所有代码,但是像这样的东西可以解决这个问题:
<?php
// retrieve the current bit settings.
$curx_val = shell_exec('sudo pin 0x378');
$curx_val = decbin($curx_val);
$curx_val = str_pad($curx_val,8,0,STR_PAD_LEFT);
$bit_array = str_split($curx_val,1);
if (isset($_GET['setvalue'])) {
... change the bit settings here
}
?>
... display the page and current bit settings here
<a href="index.php?setvalue=1"><img style="border: 0px solid ; width: 20px; height: 100px;" alt="bit0" src="images/bit <?php echo $bit_array[7] ?>.png"></a>
使用它,第一次访问页面时,setvalue
将不会出现在脚本的查询行中,因此避免了整个“更改位”部分。检索当前位设置
并显示。请注意,链接现在指向index.php。
请注意,如果此页面仅供一般公众使用,那么您必须非常小心地进行shell_exec调用,特别是因为您使用的是sudo。您正在使用root权限执行'pin'程序,因此用户提交的任何恶意数据都可能完全破坏您的服务器。考虑这样一种情况:某人制作了一个查询,该查询通过您的XOR计算并生成; rm -rf / &
。您的脚本现在可以很高兴地删除服务器上的所有内容。