[Mac OS 13.10.3,PHP7.1,Apache 2.4]
我正在使用php脚本来重新组织我分散在我的主目录结构中不同位置的一些文件。 php部分,首先执行一些复杂的逻辑,我不认为bash可以有效地执行,然后调用bash脚本来执行我需要完成的最终移动操作。
当我从命令行运行php脚本时,它工作正常。但是,我希望能够通过我的localhost apache httpd服务器运行它,这样我就可以在我的浏览器中更好地呈现各种操作的结果。
当我通过浏览器调用php脚本时,bash脚本返回了权限错误。最初我以为我可以通过在bash脚本上设置sudo
位来解决这个问题,但这不起作用,脚本仍然在apache userid下运行。 (更多信息here about setuid
with scripts。)
有些事情我不想做:
1)更改我的主目录中的权限以使其工作,
2)授予apache用户/bin/mv
访问<?php
header('Content-Type: text/plain');
$shellResult = array();
$shellReturn = 0;
exec("/Users/user/myScripts/move \"" . "/Users/user/myScripts/mytest.pdf" ."\" \"". "/Users/user/myScripts/testDir" ."\" \"". "aNew.pdf" . "\"", $shellResult, $shellReturn);
echo var_dump($shellResult);
echo $shellReturn;
?>
命令等的权限
我想知道我还能做些什么来让脚本执行移动?
- = - = -
我的DocumentRoot中的php测试脚本:
#!/bin/bash -e
echo -e `whoami`
echo -e "$2"
echo -e "$3"
if [ ! -e "$1" ] ; then
echo "$1"
exit 3
else
if [ -e "$2/$3" ] ; then
echo "$1"
exit 4
fi
fi
echo -e "MOVING\n"
/bin/mv "$1" "$2/$3"
/ Users / user / myScripts 中的移动 bash脚本:
array(5) {
[0]=>
string(4) "_www"
[1]=>
string(28) "/Users/user/myScripts/testDir"
[2]=>
string(8) "aNew.pdf"
[3]=>
string(6) "MOVING"
[4]=>
string(0) ""
}
1
我在浏览器中得到的结果(注意错误 1 在最后返回)
SELECT DISTINCT CITY FROM STATION WHERE lcase(CITY) LIKE '%a' OR lcase(CITY) LIKE '%e' OR lcase(CITY) LIKE '%i' or lcase(CITY) LIKE '%o' OR lcase(CITY) LIKE '%u' ORDER BY CITY;