LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1621|回复: 8

PHP如何执行系统命令? 试验了很多种方法但是都不成功

[复制链接]
发表于 2005-11-29 14:44:19 | 显示全部楼层 |阅读模式
现在的情况是可以从上个页面正常取值,并且如果echo的话能看到要执行的系统命令。不过无论我用system() ;exec(); $str =system ;$str =exec ; 还是passthru  都不能够执行命令,为何啊?

执行页面如下:

<?php session_start();?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>&Icirc;&THORN;±ê&Igrave;&acirc;&Icirc;&Auml;&micro;&micro;</title>
</head>

<body>
<?php
#$_SESSION[dates]=$_POST[dates];
#echo $_POST[dates];
$_SESSION[dates]=$_POST[dates];
echo $_SESSION[dates];
//echo ("/usr/local/apache/htdocs/web/umount /usr/local/apache/htdocs/web/itbn/");
//echo  ("/usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/");

$str = exec ("/usr/local/apache/htdocs/web/umount /usr/local/apache/htdocs/web/itbn/");
echo $str;
$str = exec  ("/usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/");
echo $str;
//passthru  (" /usr/local/apache/htdocs/web/umount /usr/local/apache/htdocs/web/itbn/ ",$retval);

//echo $retval;
//passthru  (" /usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/ ",$retval);

//echo $retval;


?>
</body>
</html>
发表于 2005-11-30 11:18:01 | 显示全部楼层
print `<command here>`;
i.e. print `mkdir temp`;
回复 支持 反对

使用道具 举报

发表于 2005-11-30 11:52:45 | 显示全部楼层
x:~/>php foobar.php

在命令行先执行一下看看是否成功,先确定php有没有执行的权限,比如safe_mode是不是开启什么的~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-30 12:54:41 | 显示全部楼层
多谢两位了,但是我按照第一种方法也没成功。改成这样也不成。。。
print `</usr/local/apache/htdocs/web/umount /usr/local/apache/htdocs/web/itbn/>`;
print `</usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/>`;

用第二种方式测试php,在加载系统命令的地方提示:
<body>
umount: /usr/local/apache/htdocs/web/itbn/: not mounted
mount: special device /var/www/html/backup//itbn/ does not exist
</body>


(用的是$str = exec ("/usr/local/apache/htdocs/web/umount /usr/local/apache/htdocs/web/itbn/");
echo $str;
$str = exec ("/usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/");
echo $str;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-30 13:00:20 | 显示全部楼层
但是如果我把此句话中
$str = exec ("/usr/local/apache/htdocs/web/mount -o bind /var/www/html/backup/$_SESSION[dates]/itbn/ /usr/local/apache/htdocs/web/itbn/");

$_SESSION[dates] 改成20051118 执行php就可以。。问题出在哪里呢?

而且如果执行php data_choose1.php umount能够成功的卸载所挂的目录,但是用页面执行umount也不能够执行。
回复 支持 反对

使用道具 举报

发表于 2005-12-1 09:32:31 | 显示全部楼层
這樣就確定問題的所在暸~~~妳的web服務器用戶權限不夠執行妳的那幾個命令~~~

在命令行下執行php foobar.php的權限是當前用戶權限,但是命令行無法開啓session所以第一個執行結果正確,第二個執行結果是找不到路?絶~

建議妳提高web服務器用戶權限,再試~~~不過這樣似乎囬帶?戆踩近I的影響~~
回复 支持 反对

使用道具 举报

发表于 2005-12-5 14:17:23 | 显示全部楼层
my god!
反撇号里面是命令就行了,不要<>的,都有i.e.了
回复 支持 反对

使用道具 举报

发表于 2005-12-6 11:16:42 | 显示全部楼层
权限问题,apache用户默认没有执行mount的权限。你可以使用一个叫做super的软件
回复 支持 反对

使用道具 举报

发表于 2005-12-6 12:12:37 | 显示全部楼层
.........................
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表