我在Apache / 2.2.16(Win32)上运行PHP 5.2.14,我有一个运行shell命令的脚本,在命令提示符下测试时运行良好,但在浏览器模式下(html),它没有。
mybatfile.bat
REM ...
REM process some folder details
REM code which does not work in browser mode but works in cmd mode
C:/somfolder/bin/mysqldump -u abc -pabcdef --result-file="C:/Apache22/somfolder/DBbackup/DBbackup.%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.sql" --dump-date --log-error="C:/Apache22/somfolder/DBbackup/DBbackup.%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%.log" dbname > dboutputresult.txt
REM process result of savedfile
calltobatfile.php
//process some folder information
$file = file_get_contents($folderroot."/exec/mybatfile.bat");
//var_dump($file);
$strarr = explode("\n", $file);
foreach($strarr as $line){
if(strlen($line)>1){
var_dump("line: ".$line."\n");
$output = shell_exec($line);
print_r($output);
}
}
//process result of savedfile additional information
任何帮助和建议表示赞赏。 Luhfluh
答案 0 :(得分:3)
检查权限以将其作为服务器运行。您可以将其作为所有者运行,但不可能像其他用户一样运行它 - 在您的示例中为apache。
答案 1 :(得分:2)
这是我的代码,工作正常。
$result = mysqli_query($mysqli_link,'SHOW VARIABLES LIKE \'%basedir%\';');
$row = mysqli_fetch_array($result);
$pathtodump = "".$row['Value']."/bin/mysqldump";
$command= "$pathtodump -h " . $db_host . " -u " . $db_user . " -p".$db_pass. " " . $db_dbname . "> filename.sql";
exec($command);
注意强> 尝试使用完整路径提供mysqldump.exe文件名
答案 2 :(得分:1)
可能是与许可相关的问题?在您的命令行中,您可能正在使用其他用户而不是可能没有在C:/ Apache22 / somfolder / DBbackup /或dboutputresult.txt中执行或写入所需权限的Web用户