标签: exec

escapeshellarg和escapeshellcmd有什么区别?

PHP有两个密切相关的函数,escapeshellarg()escapeshellcmd().他们似乎都做类似的事情,就是帮助一个字符串更安全的使用system()/ exec()的/ etc.

我应该使用哪一个?我只是希望能够接受一些用户输入并在其上运行命令,而不是让一切都爆炸.如果PHP有一个exec-type-function,它接受了一个绕过shell的字符串数组(比如argv),我会使用它.类似于Python的subprocess.call()功能.

php shell subprocess process exec

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

如何在Golang中运行exec.Command时调试"退出状态1"错误

当我运行以下代码时:

cmd := exec.Command("find", "/", "-maxdepth", "1", "-exec", "wc", "-c", "{}", "\\")
var out bytes.Buffer
cmd.Stdout = &out
err := cmd.Run()
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Result: " + out.String())
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

退出状态1

但是,这对调试错误的确切原因没有帮助.

如何获得更详细的信息?

error-handling command exec go

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

需要解释Linux bash builtin exec命令行为

Bash参考手册我得到以下关于execbash builtin命令:

如果提供了命令,它将替换shell而不创建新进程.

现在我有以下bash脚本:

#!/bin/bash
exec ls;
echo 123;
exit 0
Run Code Online (Sandbox Code Playgroud)

执行了,我得到了这个:

cleanup.sh  ex1.bash  file.bash  file.bash~  output.log
(files from the current directory)
Run Code Online (Sandbox Code Playgroud)

现在,如果我有这个脚本:

#!/bin/bash
exec ls | cat
echo 123
exit 0
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

cleanup.sh
ex1.bash
file.bash
file.bash~
output.log
123
Run Code Online (Sandbox Code Playgroud)

我的问题是:

如果在exec调用它取代了壳,而无需创建一个新的进程,为什么放时| cat,将echo 123被打印出来,但是没有它,它不是.所以,如果有人能解释这种行为的逻辑,我会很高兴.

谢谢.

编辑:@torek回复后,我更难解释行为:

1. exec ls>out命令创建out文件并输入ls命令结果;

2. exec ls>out1 ls>out2只创建文件,但不要放入任何结果.如果命令按照建议工作,我认为命令编号2应该与命令编号1具有相同的结果(更多,我认为它不应该创建out2文件).

linux bash flow exec

36
推荐指数
1
解决办法
3万
查看次数

检查exec()是否成功运行

我一直试图让我们知道exec()php中的命令是否成功执行,所以我可以相应地回复某些消息.我尝试了下面这段代码,但问题是无论是否exec()成功运行它始终echo "PDF not created"并且永远不会回显成功创建的pdf.请告诉我如何执行exec()执行检查,以便我可以相应地回复消息谢谢,

<?php
if (exec('C://abc//wkhtmltopdf home.html sample.pdf'))
echo "PDF Created Successfully";
else
echo "PDF not created";
?>
Run Code Online (Sandbox Code Playgroud)

php exec

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

php exec()没有执行命令

我试图用exec()'whoami'来检查它是否有效,我得到了结果

nt authority\system
Run Code Online (Sandbox Code Playgroud)

现在我需要运行.exe带有phpvia exec()函数参数的文件.

我在命令提示符下尝试了这个,它实际上运行带有给定参数的程序.这是示例命令.


注意 exe文件获得3个输入(文件夹,file_name,report_file_nmae)

> ..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml
Run Code Online (Sandbox Code Playgroud)

但是当我从php文件中运行此命令时:

exec('..\..\some_file.exe folder="C:\path_to_folder" param=1.xml report=2.xml');
Run Code Online (Sandbox Code Playgroud)

一切都没有发生.这是我第一次使用exec()函数,所以我不熟悉它的细节.怎么了?

我试过用:

  • \\ 代替 \
  • escapeshellarg() 在目录上
  • 添加""了目录文件夹名称

没运气

附录:

echo exec($command)  // echos < .... why?
Run Code Online (Sandbox Code Playgroud)

要么

exec($command, $output);
print_r($output);        // Array()
Run Code Online (Sandbox Code Playgroud)

我甚至将文件的权限更改为对所有用户的完全控制权.如果我从中调用该程序command prompt,我可以看到时钟旁边出现的图标.

但同样的呼叫php甚至都不会调用该程序.

编辑

即使exec('notepad.exe');不工作.php可能需要对配置做些什么?

php windows exec

34
推荐指数
1
解决办法
10万
查看次数

如何检查PHP中是否存在shell命令

我在php中需要这样的东西:

If (!command_exists('makemiracle')) {
  print 'no miracles';
  return FALSE;
}
else {
  // safely call the command knowing that it exists in the host system
  shell_exec('makemiracle');
}
Run Code Online (Sandbox Code Playgroud)

有什么解决方案吗?

php linux exec

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

使用nodejs的spawn会导致"unknown option - "和"[Error:spawn ENOENT]"错误

我试图spawn实现一个rm -rf node_modules跟随npm install(在Windows 7; n x命令由透明安装的CygWin提供.所有n x命令在命令行上解析就好了).

我最初使用它exec,但想要捕获stdout/stderr信息,因此我想我会使用spawn,并重写代码使用它.然而,这打破了一切.

rm重写的命令变为:

var spawn = require("child_process").spawn,
    child = spawn("rm", ["-rf", "node_modules"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { console.log(data.toString()); });
child.on('error', function() { console.log(arguments); });
Run Code Online (Sandbox Code Playgroud)

但是,运行它会生成以下错误:

rm: unknown option -- ,

Try `rm --help' for more information.
Run Code Online (Sandbox Code Playgroud)

npm重写的命令变为:

var spawn = require("child_process").spawn,
    child = spawn("npm", ["install"]);
child.stdout.on('data', function (data) { console.log(data.toString()); });
child.stderr.on('data', function (data) { …
Run Code Online (Sandbox Code Playgroud)

exec spawn node.js

33
推荐指数
1
解决办法
4万
查看次数

PHP exec()在通过浏览器执行时不会执行shell命令

我有一个PHP脚本调用exec()来执行命令将PDF转换为JPG.这个命令在bash中工作正常.

要抢占您的初步故障排除猜测,请注意以下事项:

  • safe_mode =关闭
  • 包含PDF和脚本的目录的权限设置为777,此目录也是写入JPG的位置.
  • 我传递给exec()的命令显式指向正在使用的二进制文件(例如/ usr/local/bin/convert).
  • display_errors = On
  • error_reporting = E_ALL
  • disable_functions = [空白]
  • 我正在回显exec()的输出,它什么也没有返回.默认运行的命令不返回任何内容.

当我从浏览器调用此PHP脚本(访问http://www.example.com/script.php)时,exec()不会执行其参数.

重要提示:我知道我的脚本或构建bash命令的方式没有问题,因为从bash开始,我可以用'php'执行脚本并且它可以工作(例如'php script.php'转换文件)

我也尝试用system()切换exec().

最后,我曾经有过这个问题,但是不记得我是怎么修的.

我知道有一些我缺少的东西,所以我希望其他人像我一样体验过这一点,并记得如何解决它!

提前感谢您提供的任何帮助.

亚历克斯

php system exec

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

将PyPy编译为Exe

我知道如何使用cx_freeze将CPython文件编译为exe,但是可以使用PyPy编译一个简单的程序到Exe吗?

python pypy compilation exec

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

我如何逃避蚂蚁的双引号?

我需要从ant执行以下命令,但我无法弄清楚如何转义双引号:

tasklist /FI "IMAGENAME eq java.exe" /FI "MEMUSAGE gt 50000"
Run Code Online (Sandbox Code Playgroud)

ant exec

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

标签 统计

exec ×10

php ×5

linux ×2

ant ×1

bash ×1

command ×1

compilation ×1

error-handling ×1

flow ×1

go ×1

node.js ×1

process ×1

pypy ×1

python ×1

shell ×1

spawn ×1

subprocess ×1

system ×1

windows ×1