linux系统。
关键在于怎么解决权限问题。请各位大侠帮忙。以下是我写的一个程序。该程序在root命令行里通过:php ip.php 可以成功修改IP。但是在web界面上无法修改。因为这个没有解决权限问题。求更好的方法。
IP.php
<?php
//$rsl = shell_exec("ifconfig eth0 192.168.1.2 netmask 255.255.255.0"); //改ip和子网掩码的.
$file="/etc/sysconfig/network-scripts/ifcfg-eth0";
$tstr=file_get_contents($file);
//$content=str_replace("dhcp","static",$tstr);//fwrite($fp,$content);
//fclose($fp);$IP="192.168.1.192";//用户输入
if(!preg_match_all('/IPADDR=(\d{1,3}\.){3}(\d){1,3}/',$tstr,$match)){
    //$fp=fopen($file,'w');
    $fp=fopen($file,"r+");
    fseek($fp,0,2);
    $content1="IPADDR=".$IP;
    fwrite($fp,$content1);
    fclose($fp);
}else{
    $fp=fopen($file,"r");
    $content1=fread($fp,filesize($file)-strlen($match[0][0])-1);
    fclose($fp);
    $fp=fopen($file,"w");
    fseek($fp,-sizeof($match[0][0]),2);
    $content2=$content1."\n".preg_replace('/(\d{1,3}\.){3}(\d){1,3}/',$IP,$match[0][0]);
    //$fp=fopen($file,'w');
    fwrite($fp,$content2);
    fclose($fp);
};[code=PHP]
 echo "ok";//fopen(" /etc/sysconfig/network-scripts/ifcfg-eth0","r+");
//echo $rsl."\n";//看看返回的结果.
?>[/code]

解决方案 »

  1.   

    写成shell 然后php再调用这个shell.设置好权限就行了
      

  2.   

    在web界面上无法修改是 权限的原因。
    像newnew说的
    写成shell 然后php再调用这个shell.
      

  3.   

    $file="/etc/sysconfig/network-scripts/ifcfg-eth0";
    这个文件的权限不能提高一下吗?
      

  4.   


    这个我在手册里看过,PHP好像只能调用SHELL 
      

  5.   

    ok, 我说错了, 应该google "setuid"或者直接用这个就行:
    chmod ug+s filename
      

  6.   

    就是给脚本加s权限,我做过了。没成功。
    要修改的文件ifcfg-eth0的权限是rw-------,即便是跟脚本加了s权限,还是不能修改ifcfg-eth0。
    我的系统是虚拟机实现的,而运行PHP的是外部浏览器。。是不是因为这个原因如果说连接到主机的每个用户都可以通过这种方式改IP,岂不是很危险。。
    我的系统是虚拟机实现的,而运行PHP的是外部浏览器
      

  7.   

    rw-------
    。。估计你还是没有理解权限系统权限 :---  ---  ---
    第一段三个位是设置文档所有者的权限第二个三位是设置同组用户的权限第三个三位是设置其他用户的权限。你只给了用户所有者权限,浏览器(other用户)怎么能执行你的文件呢?
      

  8.   


    ls -l 你的脚本看一下运行php的不是浏览器,是服务器你收到浏览器的请求当然要判断,怎么可能让谁都可以改
      

  9.   

    抱歉,记错了 原有权限是 rw-r--r--,其他用户没有写权限
    说白了,我就是想给web用户提权。这点shell脚本做不到,而C语言可以做到,参见:
    http://www.php100.com/html/webkaifa/PHP/PHPyingyong/2010/1222/7104.html
    为什么shell脚本做不到,参见:
    http://blog.sina.com.cn/s/blog_6987df7e0100u05j.html
      

  10.   

    ifcfg-eth0是要修改的文件,不是要执行的。脚本是有执行权限的:rwsr-xr-x
      

  11.   


    既然是要修改的文件,那怎么没给写权限?
    服务器应该是属于其他用户列的
    你起码要给rw_r_ _ r_x
      

  12.   

    但是如果服务器能以root身份执行脚本,其他用户那个x就不用了。
    嘿嘿,姐姐,我传下解决办法,你看哈
      

  13.   

    方法如下:
    写一c文件,命名为IPT.cint main() 

        uid_t uid ,euid;     uid = getuid() ; 
        euid = geteuid();     printf("my uid :%u\n",getuid());  //这里显示的是当前的uid 可以注释掉. 
        printf("my euid :%u\n",geteuid()); //这里显示的是当前的euid 
        if(setreuid(euid, uid))  //交换这两个id 
            perror("setreuid"); 
        printf("after setreuid uid :%u\n",getuid()); 
        printf("afer sertreuid euid :%u\n",geteuid());     system("php IP.php"); //IP.php代码见原帖
        return 0; 
    } 编译该文件 gcc -o ipt -Wall IPT.c  
     
    接下来要做的是加s权限:chmod u+s ./ipt 写PHP调用ipt<?php
    system('/var/www/html/ipt', $retval); 
    echo $retval;
    ?>
    运行。
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    可看到IP修改成功