PHP exec bash脚本
我已经编写了一个bash脚本来截图,我想从PHP页面启动它:PHP exec bash脚本,php,bash,Php,Bash,我已经编写了一个bash脚本来截图,我想从PHP页面启动它: #!/bin/bash screenshot="screnshot.png" screencapture='/usr/sbin/screencapture -xC' if [ `whoami` == 'root' ]; then loginpid=`ps -ax | grep [l]oginwindow.app | awk '{print $1}'` launchctl bsexec $loginpid $screencapt
#!/bin/bash
screenshot="screnshot.png"
screencapture='/usr/sbin/screencapture -xC'
if [ `whoami` == 'root' ]; then
loginpid=`ps -ax | grep [l]oginwindow.app | awk '{print $1}'`
launchctl bsexec $loginpid $screencapture $screenshot
else
$screencapture $screenshot
fi
当我尝试从CLI启动它时,它会按预期工作,但当我尝试使用PHP启动它时,它不会工作:
<?php
exec("bash /Users/giorgio/Desktop/src.sh");
?>
编辑2:
我已尝试运行以下代码来记录被调用脚本的情况:
<?php
$array = array();
$integer;
exec("bash /usr/local/bin/screenshot.sh 2>&1",$array,$integer);
echo "<pre>";
var_dump($integer);
echo "</pre>";
?>
确保bash可执行文件所在的目录位于PATH环境变量中。。。web服务器环境很可能已经过滤掉了这个问题。产生这个问题是因为OSX和MacPorts在这些方面彼此不兼容 图书馆 要解决此问题,您必须以root用户身份编辑文件/usr/pkg/sbin/envvars: 只是:
在CGI上下文中,可能不会在环境中设置“bash”。将脚本的shebang改为
/bin/bash
。否则让我们知道它是如何“不工作”的;我不知道如何更具体地说明这一点,因为脚本应该在桌面上创建一个.png,而当我从PHP启动脚本时,它并没有被创建!对不起,我是这方面的新手!我的意思是修改要执行的脚本的第一行(从w/#!
开始的那一行)。编辑.bash\u profile
也没有用;它不在PHP cgi中使用。请充分利用诊断;检查$return\u var
中的代码和脚本的输出。(输出重定向可能是必要的;将2>&1
附加到命令,您应该会在$Output
中看到一些内容)感谢您的努力!我已经按照你说的做了,现在我得到$output和$return\u val。但是我不知道如何解释它们:(我已经解决了!谢谢你的提示!我已经编辑了这个问题,包括你的答案,但不幸的是它没有按预期工作。
<?php
$array = array();
$integer;
exec("bash /usr/local/bin/screenshot.sh 2>&1",$array,$integer);
echo "<pre>";
var_dump($integer);
echo "</pre>";
?>
array(5) {
[0]=>
string(51) "dyld: Symbol not found: __cg_jpeg_resync_to_restart"
[1]=>
string(134) " Referenced from: /System/Library/Frameworks/ApplicationServices.framework/Versions/A/Frameworks/ImageIO.framework/Versions/A/ImageIO"
[2]=>
string(59) " Expected in: /Applications/MAMP/Library/lib/libJPEG.dylib"
[3]=>
string(0) ""
[4]=>
string(95) "/usr/local/bin/screenshot.sh: line 11: 44948 Trace/BPT trap $screencapture $screenshot"
}