标签: shell-exec

PHP中的system(),exec()和shell_exec()有什么区别?

可以通过三个PHP函数运行外部命令

system();
exec();
shell_exec();
Run Code Online (Sandbox Code Playgroud)

但他们的区别是什么?尽管它们具体应用,但在大多数情况下,可以同样使用.我很想知道哪些是可以同样使用的首选.例如,对于解压缩文件或压缩文件夹(使用tar命令),哪一个是首选(可能从性能的角度来看)?

更新:在另一个问题中,我发现了一个非常有用的链接,描述了这些功能的不同方面.我在这里分享链接,因为其他人可能会用来更好地了解安全问题和其他方面.

php shell system exec shell-exec

64
推荐指数
1
解决办法
5万
查看次数

如何通过PHP执行SSH命令

我期待通过PHP发送SSH.什么是最好/最安全的方式?我知道我能做到:

shell_exec("SSH user@host.com mkdir /testing");
Run Code Online (Sandbox Code Playgroud)

还有什么更好的?那感觉很'顽皮':).

php ssh shell-exec

62
推荐指数
5
解决办法
16万
查看次数

"if"列表在哪里切换?

是否有if用于bash脚本的所有开关的列表?有时我看到有人使用它,我想知道他们正在使用的切换实际上是做什么的.

例子就是-z这一个.我知道如何使用它,但我不知道它是从哪里得到的.

if [ -z "$BASH_VERSION" ]; then
    echo -e "Error: this script requires the BASH shell!"
    exit 1
fi
Run Code Online (Sandbox Code Playgroud)

任何参考,指南,帖子,答案将不胜感激.

bash if-statement shell-exec switch-statement

30
推荐指数
4
解决办法
2万
查看次数

PHP - 如何让Shell错误回显到屏幕

我正在shell_exec()第一次使用.我正在尝试使用ffmpeg shell脚本在我的服务器上转换一些视频文件.

当我在浏览器中的下面的代码时,它返回NULL:

var_dump(shell_exec("ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4"));
Run Code Online (Sandbox Code Playgroud)

但是,当我在终端中运行等效代码时:

> ffmpeg -i /var/www/html/sitedomain/httpdocs/tmp/ebev1177.mp4

我收到了大量有用的信息,这些信息以错误结束 "At least one output file must be specified"

为什么这些信息没有传回我的PHP脚本,所以我可以回应它?

php shell ffmpeg shell-exec

23
推荐指数
1
解决办法
2万
查看次数

使用PHP ping IP地址并回显结果

我有以下功能,到目前为止我没有工作.我想ping一个IP地址,然后回显IP是否存在.

function pingAddress($ip){
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

    if ($deadoralive == false){
        echo "The IP address, $ip, is dead";
    } else {
        echo "The IP address, $ip, is alive";
    }

}
Run Code Online (Sandbox Code Playgroud)

当我使用示例调用此函数时:

pingAddress("127.0.0.1")
Run Code Online (Sandbox Code Playgroud)

回声结果总是"死" - 无论如何.

有人可以在我出错的地方帮助我吗?和/或者有更好的方法来做同样的结果吗?

非常感谢.

更新:已修改代码以包含双引号但仍获得相同(不正确)的结果.

php ping shell-exec

19
推荐指数
3
解决办法
9万
查看次数

将多个PHP变量传递给shell_exec()?

我使用shell_exec方法从PHP调用test.sh.

$my_url="http://www.somesite.com/";
$my_refer="http://www.somesite.com/";
$page = shell_exec('/tmp/my_script.php $my_url $my_refer');
Run Code Online (Sandbox Code Playgroud)

但是,命令行脚本说它只收到一个参数:/tmp/my_script.php

当我将呼叫更改为:

码:

$page = shell_exec('/tmp/my_script.php {$my_url} {$my_refer}');
Run Code Online (Sandbox Code Playgroud)

它说它接收了3个参数,但是argv [1]和argv [2]是空的.

当我将呼叫更改为:

码:

$page = shell_exec('/tmp/my_script.php "http://www.somesite.com/" "http://www.somesite.com/"');
Run Code Online (Sandbox Code Playgroud)

该脚本最终按预期接收所有3个参数.

您是否始终只需使用脚本发送带引号的文本,并且不允许发送像$ var这样的变量?或者有一些特殊的方式你必须发送$ var?

php shell shell-exec

19
推荐指数
3
解决办法
6万
查看次数

从php执行Powershell脚本

我正在尝试从PHP执行powershell脚本,但它似乎不起作用.

脚本'newEvent.ps1'在Exchange服务器上创建一个事件.

$psPath = "powershell.exe";
$psDIR = "C:\\wamp\\www\\ant\\assets\\ps\\";
$psScript = "newEvent.ps1";
$runScript = $psDIR. $psScript;
$runCMD = $psPath." ".$runScript." 2>&1"; 

echo "\$psPath  $psPath <br>";
echo "\$psDIR  $psDIR <br>";
echo "\$psScript  $psScript <br>";
echo "\$runScript  $runScript <br>";
echo "\$runCMD   $runCMD  <br>";

exec( $runCMD,$out,$ret);

echo "<pre>";
print_r($out);
print_r($ret);
echo "</pre>";
Run Code Online (Sandbox Code Playgroud)

它输出:

$psPath powershell.exe
$psDIR C:\wamp\www\ant\assets\ps\
$psScript newEvent.ps1
$runScript C:\wamp\www\ant\assets\ps\newEvent.ps1
$runCMD powershell.exe C:\wamp\www\ant\assets\ps\newEvent.ps1 2>&1

Array
(
    [0] => File C:\wamp\www\ant\assets\ps\newEvent.ps1 cannot be loaded because the execut
    [1] => ion of scripts is disabled …
Run Code Online (Sandbox Code Playgroud)

php powershell exchange-server shell-exec

12
推荐指数
1
解决办法
5万
查看次数

连接到Gmail IMAP PHP"无法打开流"

有很多人有类似的问题,但没有人回答他们的问题.我在PHP中启用了IMAP,使用了所有正确的信息.我不知道我哪里出错了.

这是我的代码:

$hostname = '{imap.gmail.com:995/imap/ssl/novalidate-cert}'; 
$username = 'emailaddress@gmail.com'; $password = 'password'; 
$inbox = imap_open($hostname,$username,$password) or die('Cannot connect to Gmail: ' . imap_last_error());

print_r(imap_errors());
Run Code Online (Sandbox Code Playgroud)

除以下情况外不返回任何错误:

警告:imap_open()[function.imap-open]:无法在/home/a8066360/public_html/test/imap.php上打开流{imap.gmail.com:995/imap/ssl/novalidate-cert} 6

无法连接到Gmail:无法连接到gmail-imap.l.google.com,995:连接已超时

我注意到如果我将单引号更改为`

出于安全原因,shell_exec()已被禁用...

请帮忙!!!

php gmail imap shell-exec

12
推荐指数
2
解决办法
2万
查看次数

当path有空格时,无法执行child_process.exec()

我正在使用appjs*,我想执行一个命令来打开一个文件夹.

是)我有的

var path = __dirname + '/folder to open/'; 
// path = C:\Program Files\myapplication/folder to open/
require("child_process").exec("start " + path);
Run Code Online (Sandbox Code Playgroud)

错误

找不到文件C:\ Program

我尝试了什么

我已经试图逃离那些没有用的空间.

var path = __dirname + '/folder to open/'; 
path = path.replace(' ', '\ ');
// path = C:\Program Files\myapplication/folder to open/
require("child_process").exec("start " + path);
Run Code Online (Sandbox Code Playgroud)

当我把路径放在引号之间时,没有打开文件夹,只有另一个提示.

var path = "\"" + __dirname + "/folder to open/\"";
path = path.replace(' ', '\ ');
// path = "C:\Program Files\myapplication/folder to open/"
require("child_process").exec("start " + …
Run Code Online (Sandbox Code Playgroud)

shell-exec node.js

12
推荐指数
2
解决办法
1万
查看次数

'git pull'命令从终端工作但不是通过git repository hook使用php shell_exec()

我在我的github存储库中创建了一个webhook,它在我的实时服务器上的hook url上发布,用于运行pull命令来更新服务器上的repo文件.

问题是我创建的钩子文件位于/var/www/site/web/hookfile.php(帖子请求就在那里.我也得到了身体响应)

我的repo文件在/ var/www/git-repo /

当我将任何东西推送到我的github存储库时,它不会更新git-repo.我使用终端及其工作运行此命令.

cd /var/www/git-repo && git pull
Run Code Online (Sandbox Code Playgroud)

但通过我的PHP文件它无法正常工作

shell_exec('cd /var/www/git-repo && git pull')
Run Code Online (Sandbox Code Playgroud)

php git github repository shell-exec

12
推荐指数
2
解决办法
7731
查看次数