当我尝试运行 shell 脚本时exec
,shell_exe
什么也没有发生!当我使用这些命令ls
或whoami
所有工作运行时。
会是什么呢?
你回显输出吗?
echo exec('ls');
您是否启用了安全模式?
phpinfo();
是时:(来自手册)
注意:启用安全模式后,您只能执行 safe_mode_exec_dir 中的文件。出于实际原因,目前不允许在可执行文件的路径中包含 .. 组件。
尝试调用 exec
exec('...pathtoyourbashscript...', $out, $return);
然后
echo $return;
如果它显示127
它很可能路径是错误的。
还要检查权限。用户 'nobody' 可能是 apache 用户,它需要访问和执行脚本的权限。
您可以通过运行更改权限
chmod 755 pathtouyourscript
这意味着类似“我不介意其他人是否阅读或运行此文件,但只有我应该能够修改它”。
如果您使用的是 Apache,请检查以确保 Apache 用户具有执行 php 文件所需的权限。
您可以使用反射来确定该功能是否已被禁用disable_functions
。
$exec = new ReflectionFunction('exec');
print $exec->isDisabled() ? 'Disabled' : 'Enabled';
如果程序是基于 web 的,即 linux,请尝试制作一个 php 文件来处理 shell。和一个 shell 文件来处理 php..
例如:runAllShell.php 文件可以包含一个循环。:
<?php
// Developed by A T.
// Count the files
$directory = '/put/directory/path_here/';
$files = glob($directory . '*.*');
if ( $files !== false )
{
$filecounter = count( $files );
}
else
{
echo "No Files were found";
}
$fileCount = $filecounter;
// Start the index
$fileNumber = 1;
while($fileNumber <= fileCount){
shell_exec('$fileNumber . ".sh"');
// get some feedback
echo "The ".$fileNumber." file has been excecuted";
// increment file number
$fileNumber++;
}
?>
确保目录中的所有 .sh 文件都按数字顺序排列以使其正常工作,即:1.sh 2.sh 3.sh 等等。
最好的问候, AT。