学习PHP - 有更好的方法吗?

时间:2011-07-05 16:34:56

标签: php

我是PHP的新学习者。我写了以下两个似乎有用的文件。

  1. 我想知道我是否只用一个脚本就能达到效果。
  2. 我想知道是否有更好的方法来做到这一点。
  3. dox.php每次都必须重定向到index.php,我可以取消重定向吗?
  4. 用文字概括两个文件的内容: Index.php创建一个包含8个图像的页面。所有这8个图像都有备用版本,表示图像/按钮处于活动状态。单击按钮并执行操作,再次单击它并执行相反的操作。 (使用XOR功能) - 图像/按钮的当前条件由外部变量决定。 (有点像反馈系统)

    内容:index.php

    <!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实时馈送功能?)

1 个答案:

答案 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 / &。您的脚本现在可以很高兴地删除服务器上的所有内容。